реклама на сайте
подробности

 
 
> Вывод символов в UART по прерванию, виснет проц. AT91SAM7X512
igorenja
сообщение Aug 25 2009, 07:27
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 8-08-08
Из: Новосибирск
Пользователь №: 39 488



Доброе время суток!

Случилась у меня следующая проблемка:
Как известно существует несколько вариантов настройки AIC, среди которых есть режим чувствительности к уровню входного сигнала и режим чувствительности к фронту. При использовании первого случая в обработчике прерывания должен присутствовать код, который сбросит источник прерывания, во втором случае это делать не обязательно.

Ниже приведен код, задачей которого является выводить в УАРТ (в данном случае ДБГУ, но и с обычным проблема не исчезает) символы по прерыванию:

CODE
void USART_DBGU_irq_handler(void)
{
unsigned int status;
status = USART_pt_d->US_CSR;
if ( status & AT91C_US_RXRDY)
{
rx_buffer[ptr_rx_wr]=(char)AT91F_US_GetChar(USART_pt_d);
if(++ptr_rx_wr>=TX_BUFFER_SIZE) ptr_rx_wr=0;
bUART_DBGU_RX=1;
}
if ( status & AT91C_US_TXRDY)
{
if(ptr_tx_rd!=ptr_tx_wr)
{
AT91F_US_PutChar(USART_pt_d, tx_buffer[ptr_tx_rd]);
if(++ptr_tx_rd>=TX_BUFFER_SIZE) ptr_tx_rd=0;
}
else
{
AT91F_US_DisableIt (USART_pt_d,AT91C_US_TXRDY);
}
}
}



CODE
int putchar(int out)
{
AT91F_US_DisableIt(USART_pt_d,AT91C_US_RXRDY|AT91C_US_TXRDY);
tx_buffer[ptr_tx_wr++]=(char)out;
if(ptr_tx_wr>=TX_BUFFER_SIZE) ptr_tx_wr=0;
AT91F_US_EnableIt(USART_pt_d,AT91C_US_RXRDY|AT91C_US_TXRDY);
return out;
}


В общем этот код работает только при настройке AIC в режиме чувствительности к фронту. А мне край дела нужно чтобы он работал в режиме чувствительности к уровню. "Неработа" проявляется тогда кода выводится большое колличество символов подряд и процессор зависает.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th July 2025 - 20:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01369 секунд с 7
ELECTRONIX ©2004-2016