albundy
24.03.2010, 13:29
Hallo,
ich arbeite mich gerade in die Atxmega Serie ein und suche nach einer Möglichkeit,
um den Printbin Befehl der Atmegas nachzuempfinden, da ich mit unterschiedlicher
Anzahl binäre Daten (Konstanten und Variablen) übertragen muss.
(Printbin wird bei Atxmegas im Moment noch nicht unterstützt)
Die Routine ist ja eigendlich sehr einfach.
_data = &HAA
+00000061: LDI R24,0xAA Load immediate
+00000062: STS 0x0101,R24 Store direct to data space
Printbin _data ; &HBB ; &HCC
+00000064: LDI R19,0x01 Load immediate
+00000065: LDI R26,0x01 Variable _data ins X-Register
+00000066: LDI R27,0x01
+00000067: CALL 0x00000076 Call subroutine
+00000069: LDI R24,0xBB Load immediate
+0000006A: CALL 0x0000007B Call subroutine
+0000006C: LDI R24,0xCC Load immediate
+0000006D: CALL 0x0000007B Call subroutine
+0000006F: NOP No operation
+00000070: NOP No operation
+00000071: NOP No operation
------------------------------------------------------------------------------------------
Do
Loop
+00000072: JMP 0x00000072 Jump
End
+00000074: CLI Global Interrupt Disable
+00000075: RJMP PC-0x0000 Relative jump
------------------------------------------------------------------------------------------
+00000076: LD R24,X+ Load indirect and postincrement
+00000077: RCALL PC+0x0004 Relative call subroutine
+00000078: DEC R19 Decrement
+00000079: BRNE PC-0x03 Branch if not equal
+0000007A: RET Subroutine return
+0000007B: LDS R0,0x00C0 Statusregister TxD
+0000007D: SBRS R0,5 springe wenn TxD Ready
+0000007E: RJMP PC-0x0003 sonst weiter Status abfragen
+0000007F: STS 0x00C6,R24 Daten senden
+00000081: RET Subroutine return
Aber ich frage mich, woran erkennt der Compiler, wie oft er die Subroutine für das
Senden aufrufen muss.
Um das ebenso flexibel umzusetzen fehlt mir im Moment eine Idee.
Vielleicht hat ja jemand einen Vorschlag.
Ich würde mich freuen.
ich arbeite mich gerade in die Atxmega Serie ein und suche nach einer Möglichkeit,
um den Printbin Befehl der Atmegas nachzuempfinden, da ich mit unterschiedlicher
Anzahl binäre Daten (Konstanten und Variablen) übertragen muss.
(Printbin wird bei Atxmegas im Moment noch nicht unterstützt)
Die Routine ist ja eigendlich sehr einfach.
_data = &HAA
+00000061: LDI R24,0xAA Load immediate
+00000062: STS 0x0101,R24 Store direct to data space
Printbin _data ; &HBB ; &HCC
+00000064: LDI R19,0x01 Load immediate
+00000065: LDI R26,0x01 Variable _data ins X-Register
+00000066: LDI R27,0x01
+00000067: CALL 0x00000076 Call subroutine
+00000069: LDI R24,0xBB Load immediate
+0000006A: CALL 0x0000007B Call subroutine
+0000006C: LDI R24,0xCC Load immediate
+0000006D: CALL 0x0000007B Call subroutine
+0000006F: NOP No operation
+00000070: NOP No operation
+00000071: NOP No operation
------------------------------------------------------------------------------------------
Do
Loop
+00000072: JMP 0x00000072 Jump
End
+00000074: CLI Global Interrupt Disable
+00000075: RJMP PC-0x0000 Relative jump
------------------------------------------------------------------------------------------
+00000076: LD R24,X+ Load indirect and postincrement
+00000077: RCALL PC+0x0004 Relative call subroutine
+00000078: DEC R19 Decrement
+00000079: BRNE PC-0x03 Branch if not equal
+0000007A: RET Subroutine return
+0000007B: LDS R0,0x00C0 Statusregister TxD
+0000007D: SBRS R0,5 springe wenn TxD Ready
+0000007E: RJMP PC-0x0003 sonst weiter Status abfragen
+0000007F: STS 0x00C6,R24 Daten senden
+00000081: RET Subroutine return
Aber ich frage mich, woran erkennt der Compiler, wie oft er die Subroutine für das
Senden aufrufen muss.
Um das ebenso flexibel umzusetzen fehlt mir im Moment eine Idee.
Vielleicht hat ja jemand einen Vorschlag.
Ich würde mich freuen.