Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: At91R40008 не обробатываються прерывания USARTа
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
F@ntic
Использую:
MK - AT91R40008
OS - NutOS
ПО - Eclipse + JLink + Yagarto

Проблема: программа не попадает в прерывания от USARTа. Обработчик прерывания привязывал, как с помомощью API NutOsа, так и ручками через регистры (текущий вариант). USART работает, т.е. байты передаёт/принимает, флаги выставляет, но прерывания не срабатывает.
Посоветуйте что нить smile3046.gif crying.gif .

CODE
void USART0Interrupt(void *arg)
{
IRQ_ENTRY();
count++;

while ((inr(US0_CSR) & US_TXRDY) == 0);
outr(US0_THR, 0xAA);

IRQ_EXIT();
return;
}

int main(void)
{

...
//----------USART-------------
//! Disable GPIO on UART tx/rx pins.
outr(PIO_PDR, _BV(UART0_TXD_BIT) | _BV(UART0_RXD_BIT));

//! Enable USART clock.
outr(PS_PCER, _BV(US0_ID));

//! Disable all UART interrupts.
outr(US0_IDR, 0xFFFFFFFF);

//! Reset receiver and transmitter
outr(US0_CR, US_RSTRX | US_RSTTX | US_RXDIS | US_TXDIS);

//! Define the baud rate divisor register
outr(US0_BRGR, 33);

//! Write the Timeguard Register
outr(US0_TTGR, 0);

//! Set UART mode to 8 data bits, no parity and 1 stop bit
outr(US0_MR, US_CHMODE_NORMAL | US_CHRL_8 | US_PAR_NO | US_NBSTOP_1);
//outr(US0_MR, US_CHMODE_LOCAL_LOOPBACK | US_CHRL_8 | US_PAR_NO | US_NBSTOP_1);

// Enable USART receiver and transmitter
outr(US0_CR, US_RXEN | US_TXEN);

//! Enable all UART interrupts.
outr(US0_IER, 0xFFFFFFFF);
//outr(US0_IER, US_RXRDY | US_TXRDY | US_RXBRK | US_OVRE | US_FRAME | US_PARE);

//----------AIC-------------
//! Disable the interrupt on the interrupt controller
outr(AIC_IDCR, _BV(US0_ID));
//! Set the vector.
outr(AIC_SVR(US0_ID), (unsigned int)USART0Interrupt);

//! Initialize to edge triggered with defined priority.
outr(AIC_SMR(US0_ID), AIC_SRCTYPE_INT_LEVEL_SENSITIVE | 4);

//! Clear the interrupt on the interrupt controller
outr(AIC_ICCR, _BV(US0_ID));

//! Enable the interrupt on the interrupt controller
outr(AIC_IECR, _BV(US0_ID));


while ((inr(US0_CSR) & US_TXRDY) == 0);
outr(US0_THR, 0xAA);

...
return 0;
}


З.Ы: в теме уровень новичка, если что написал не правильно не пинать.
etoja
Совету сменить:
1) компилятор на Rowley Crossstudio
2) микроконтроллер на NXP или ST


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.