2012-04-18 2 views
1

다른 보드로의 전송을 위해 Atmega169/AVR Butterfly의 UART를 사용하고 있습니다 (전송률 56700, 패리티 없음, 1 정지 비트, 흐름 제어 없음). 발진기는 7,3768MHz로 작동합니다 (체크 표시). 데이터를 성공적으로 전송할 수 있지만 다른 데이터는 수신하지 못합니다. 디버거를 실행할 때 구성 비트가 모두 올바르게 설정되어 있지만 RXC는 항상 거짓입니다. 또한 데이터를 보낼 수 있는지 확인합니다. 나 자신 (TXD를 RXD에 연결하고 접지 됨), 성공하지 못했습니다. (ISR뿐만 아니라 폴링 시도) 아래 코드의 관련 부분이 있습니다, 나는 당신이 그것을 처리 할 수 ​​있기를 바랍니다 - PORTB는 오실로스코프 테스트를위한 출력으로 사용됩니다 (하나의 핀을 사용할 수 있지만, 지금 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 라인이 깨진되지 않았다 보드를 전환하고 지금은 일하고, 그래서 위의 코드는 유효합니다!

관련 문제