Hallo,
laut Datenblatt des ATMega (z.B. 1284) geht das Empfangen ganz leicht:
1 | USART_Receive:
|
2 | ; Wait for data to be received
|
3 | sbis UCSR0A, RXC0
|
4 | rjmp USART_Receive
|
5 | ; Get and return received data from buffer
|
6 | in r16, UDR0
|
7 | ret
|
Wenn ich das versuche als Inline Assembler mit dem GCC zu kompilieren
geht das nicht. Der GCC verwendet bei dem übersetzten C-Code immer
"lds", um UCSR0A von 0xc0 und UDR0 von 0xc6 zu laden. Nicht, dass ich
dafür ein Register brauche, auch dauert lds 2 Zyklen und in nur ein
Zyklus.
Mache ich da irgendwas falsch oder ist das einfach so, dass der AVR-ASM
"komfortabler" ist in dieser Beziehung?
Viele Grüße,
Maxl