2012-04-18 10 views
1

私はAtmega169/AVR ButterflyのUARTを使用して別のボード、ボーレート56700、パリティなし、1ストップビット、フロー制御なしに送信しています。発振器は7,3768MHzで動作しています(チェックしてください)。私はデータを正常に送信することができます(他のボードとPC /ハイパーターミナルでチェックされていますが、データは受信されません) - デバッガを実行しているときに設定ビットはすべて正しく設定されていますが、RXCは常にfalseです。自分自身(TXDをRXDに接続して接地)しても、成功することはありません。 (ISRとポーリングを試してみた) コードの関連部分を以下に示します。PORTBはオシロスコープでテストするための出力として使用されています(1つのピンを使用することができますが、今PORTBの他には何も):AVR Butterfly UART - データを受信できません。

int main(void){ 
OSCCAL_Calibrate();  // calibrate the internal oscillator 
int UBRR_VAL = ((F_CPU)/(BAUD*16)-1); 
UART_Init(UBRR_VAL); 
DDRB |= 0xFF; 
PORTB = 0; 
testCharSend(); 

while(1); 
return 0; 
} 

void testCharSend() 
{ 
char i = 'x'; 
while(1){  
    Uart_Tx(i); 
} 
} 

void UART_Init(unsigned int baudrate) 
{ 
    // Set baud rate 
    UBRRH = (unsigned char)(baudrate>>8); 
    UBRRL = (unsigned char)baudrate; 

    UCSRA = 0; 

    // Enable receiver and transmitter 
    UCSRB = (1<<RXEN)|(1<<TXEN); 

    // Async. mode, 8bit, No parity, 1 stop bit (like CC2540) 
    UCSRC = (0<<UMSEL)|(0<<UPM0)|(0<<USBS)|(3<<UCSZ0)|(0<<UCPOL); 

// enable receive interrupt 
UCSRB |= (1<<RXCIE); 

// flush UART 
UART_Flush(); 
} 

void UART_Flush(void) 
{ 
unsigned char dummy; 
while (UCSRA & (1<<RXC)) dummy = UDR; 
} 

void Uart_Tx(char data) 
{ 
    while (!(UCSRA & (1<<UDRE))); 
    UDR = data; 
} 

ISR (USART0_RX_vect) 
{ 
    PORTB ^= 0xFF; 
char c = UDR; 
} 

答えて

1

OK、私はオシロスコープとの接続をテストし、ボード上のRXDラインが壊れていた、ボードを切り替えないと今では働いているので、上記のコードが有効です!

関連する問題