AVR Butterfly UART - не принимает данные

Я использую UART Atmega169 / AVR Butterfly для передачи на другую плату, скорость передачи 56700, без четности, 1 стоповый бит, без управления потоком. Генератор работает на частоте 7,3768 МГц (проверено). Я могу успешно передавать данные (проверено с другой платой и ПК / HyperTerminal), но не получать никаких данных - при запуске отладчика все биты конфигурации установлены правильно, но RXC постоянно ложный - я также проверил, могу ли я отправлять данные на сам (подключил TXD к RXD и заземлил), но безуспешно. (Пробовал с ISR, а также с опросом) Ниже приведены соответствующие части кода, я надеюсь, вы справитесь с этим - PORTB используется в качестве выходных данных для тестирования с помощью осциллографа (я знаю, что мог бы просто использовать один контакт, но нет ничего еще на PORTB прямо сейчас):

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;
}

person Till Riemer    schedule 18.04.2012    source источник


Ответы (1)


Хорошо, я проверил соединения с помощью осциллографа, линия RXD на плате была оборвана, поменял плату, и теперь она работает, так что приведенный выше код действителен!

person Till Riemer    schedule 19.04.2012