Цитата(aaarrr @ Mar 31 2008, 15:41)

Нужно прочитать DBGU_RHR.
Да, действительно, затормозило.
Но вот от чего весь сыр бор:
void Uart_dbgu_irq_handler()__irq
{
if ((pDBGU->DBGU_CSR & AT91C_US_RXRDY)) /* Wait for Full Rx Buffer */
{
count_byte++;
if(count_byte<5)
{
zumer[0]=zumer[0]<<8 | pDBGU->DBGU_RHR;
while (!(AT91C_BASE_DBGU->DBGU_CSR &AT91C_US_TXRDY));
AT91C_BASE_DBGU->DBGU_THR = zumer[0];
while (!(AT91C_BASE_DBGU->DBGU_CSR &AT91C_US_TXRDY));
AT91C_BASE_DBGU->DBGU_THR = count_byte;
}
}
pDBGU->DBGU_CR = AT91C_US_RSTSTA;
AT91C_BASE_AIC->AIC_EOICR=0x00;
}
Посылаю данные: d;4;5;6;7;8;9;a;b;c;d
Получаю назад такую картину:
D 1
4 2
5 3
6 4
7 0
8 1
9 2
A 3
B 4
C 0
D 1
Почему когда выполнится условие, count_byte сбрасывается в ноль и портит мне настроение.
Для полной картины:
count_byte описан как глобальная unsigned char и обнуляется в main(), в самом начале и все, дальше бесконечный цикл.
в файле uart.c, где у меня обработчик прерываня пишу extern unsigned char count_byte.