So gesehen hast du recht.
Ich kann aber eigentlich keinen Fehler sehen.
Sei () hast du ja drinnen ?
Druckbare Version
So gesehen hast du recht.
Ich kann aber eigentlich keinen Fehler sehen.
Sei () hast du ja drinnen ?
siehst du da irgndwo einen Fehler ? :-sCode:__task void main()
{
init_hw_uart(); // 19200 @3.686 MHz
__enable_interrupt();
while(1);
}
void init_hw_uart()
{
// Set Baudrate
UBRRH = 0x00;
UBRRL = 0x0B;
// Enable receiver and transmitter
UCSRB |= (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
// Set frame format: 8data bit , 1 Stop Bit
UCSRC |= (1<<UCSZ1)|(1<<UCSZ0);
}
void transmit_byte(unsigned char data)
{
// Put data into buffer, sends the data
UDR = data;
}
#pragma vector=USART_RXC_vect
__interrupt void UART_RX_interrupt(void)
{
DDRB |= (1<<PB0); // Status LED initialization
PORTB ^= (1<<PORTB0); // toggle status LED
unsigned char data;
data = UDR; //receive data
transmit_byte(data); // echo data
}
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
Geht jetzt.... ](*,)
ok dann ma sw-uart mit reinbasteln
Sollt eigentlich funzen (HW UART geht noch *gg*). Stell den Code schon ma online..
Muss nur noch die zusätzlichen Leitungen verbinden.
Der RxCounter-Stand vom Software UART wird wieder mit send_one_byte() ans Terminal geschickt.
So wars auch gedacht ?!
Schau ich mir gleich an.
Wir können für diesen Versuch auch mit der HW-Uart senden, es ist im Grunde egal.
Wenn das Echo mal prinzipiell getestet ist und funzt,
hw_transmit_byte(data); // echo data
reicht aber dann
hw_transmit_byte(bRxCount + 0x30); // return actual rxcounter
bin ich neugierig
HW-UART funzt, aber anscheinend wird nie RX_M_DATA gesetzt (siehe while-Schleife)
Denn im Terminal zeigts kein Counterstand an...
Habs jetzt so:
Mal schauen, ob INT0 überhaupt anspringt.
In der Hw Receive-ISR den Flag RX_M_RECEIVE prüfen
Isser gesetzt, ist INT0 offenbar angesprungen
wenn nicht, müssen wir klären, warum das so ist.
( mach einfach statt "send-one-byte( '0') oder ('1') )
Ist der Flag da, aber rxCount bleibt null, kommt die Timer-ISR nicht dran
(irgendein enable fehlt ?)
Schaust du mal ?
Sag ma sperren sich die Interrupts nicht gegenseitig ??
Meine damit INT0 und den USART_RXC...
Hab Status LED in INT0 und des springt net an...
Außerdem is ja INT0 PD2 und RXD ist PD0