Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
TUART::TUART()
{
/* Initialize Pin Select Block for Tx and Rx */
PINSEL0|=0x5;
/* Enable FIFO's and reset them */
U0FCR=0x7;
/* Set DLAB and word length set to 8bits */
U0LCR=0x83;
U0DLL = BAUDRATEDIVISOR & 0xff;//записываем младший байт
U0DLM = (BAUDRATEDIVISOR >> 8) & 0xff;//записываем старший байт
/* Clear DLAB */
U0LCR=0x3;
/* Enable FIFO's and reset them */
U0FCR=0x7;
//Enable UART0 interrupts
U0IER_bit.RDAIE = 1; //Enable byte received interrupt
U0IER_bit.THREIE = 1; //Enable tx buf empty interrupt
U0IER_bit.RXLSIE = 1;
VICIntSelect &= ~VIC_UART0_bit; // IRQ on UART0.
VICVectAddr5 = (unsigned int)&UART0isr;
VICVectCntl5 = 0x20|isrUART0;// Enable vector interrupt for UART0.
VICIntEnable |= VIC_UART0_bit;// Enable UART 0 interrupt.
}void TUART::UART0isr(void)
{
switch(U0IIR_bit.IID)
{
case 0x1: //THRE interrupt
break;
case 0x2: //Receive data available
break;
default:
break;
};
VICVectAddr = 0x00; //Dummy write to signal end of interrupt
};
Это весь код с инициализацией и обработчиком. При таком раскладе прервание по передаче возникает а по приему нет. О возникновении прерывания сужу по переменной, которую инкрементирую либо по событию приема либо по передаче.
Затем значение переменной просто на экран вывожу.
Составить ответ | Вернуться на конференцию
Ответы