Добрый день всем ! кто может пояснить мне как правильно построить обработчик прерывания по приему данных UART. Обработчик должен срабатывать по флагу DR регистра UART_LSR. путь действий следующий. настраиваюсь на нужную скорость - передача данных из процессора идет, идет запись в файл и т.д. с этим все превосходно. настраиваю прерывания: отображаю прерывание периферии на прерывание ядра : *pSIC_IAR1 = 0xf3ffffff ; снимаю маски : *pSIC_IMASK = 0x00004000; включаю обработчик register_handler(ik_ivg10, UARTRx_ISR); разрешаю прерывание: *pUART_IER =0x1;//Enable interrupts for receive
и собственно сам обработчик:
EX_INTERRUPT_HANDLER(UARTRx_ISR) { REC_Data = *pUART_RBR; ssync(); do {;} while (!(*pUART_LSR & TEMT)) ; // *pUART_THR = REC_Data ; ssync();
}
пробывал буфферизировать входные данные не помогает. тестирую следующим образом - в HypTerminal. работаю посимвольно - пытаюсь ввести ряд символов записать их в массив, а потом выдать обратно. но с выше описанным подходом ничего не получается. Буду благодарен за помощь ! Заранее спасибо !
|