| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > LPC2106 и прерывание от UART |
| Автор: xelax 7.11.2006, 11:10 |
| Начал разбираться с LPC 2106. Купил книжку Тревора Мартина "Микроконтроллеры семейство ARM7 LPC2000 компании Philips". Так вот там мимоходом так в главе про универсальный асинхронный приёмопередатчик сказанно дословно : "FIFO буфер передачи генерирует прерывания при опустошении регистра хранения передатчика THR, а также при опустошении сдвтгового регитсра передатчика TSR". В юзермануале ничего похожего не нашёл. Вообще про прерывание по освобождению TSR ни слова. Кто может прокомментировать расхождение в книжке и мануале. UART у меня заведён на драйвер RS485, и по окончанию передачи мне его надо переводить на приём. Пока сделал тупо - после прерывания от THR последнего символа, в цикле жду пока поднимется флажок в регистре LSR. Пока не вижу как сделать более корректно. Прерывание от TSR спасло бы ситуацию. |
| Автор: Ivan. 7.11.2006, 18:18 |
| Я еще плохо знаю как там реализованно в ARM (руки не доносят), но в AVR сделано так: - там есть аппаратный буфер их 2-х байт, - прерывание принятого байта (все просто), - прерывание об присудствии свободного места в буфере (тоесть пока контроллер отправляет один байт, ты можешь подготавливать следующий байт, чтобы не разрывать пакет), - и прерывание об полностью освободившемся буфере (тоесть данные полностью улетели и ты можешь занимать линию (переключать прием-передачу)). В ARM есть прямой доступ к памяти DMA, два указателя на буферы отправки и размеры этих буферов. принцип: ты заполнил один буфер, дал команду отправлять, заполнил второй буфер и добавил его в очередь. когда контроллер отправит один буфер, он вызывает прерывания, говоря, что есть свободное место в очереди. Если тебе надо отправить еще данные - ты заполняешь следующий буфер и ставишь его в очередь. Когда оба буфера освободяться - вызывается другое прерывание, каторое скорей всего и говорит о том, что данные полностью отправлены. также там есть непосредственный регистротправки, в каторый ты можешь класть данные. (он помоему занимает 10 бит). Не скажу, что 100% информация, но я понял так. |
| Автор: PILOT 7.11.2006, 22:59 |
| Ivan, прям как в анекдоте про студента который выучил один билет из 25 про червяков, ему попадается про слона, тогда он рассказывает: слон - животное с червеобразным хоботом, черви бывают... По делу: я сам сейчас ковыряюсь с АРМ7ом, и делаю это исключительно по даташиту, в даташите указанного прерывания нет, а значит его нет и в кристалле. Вот все прерывания USART (маски): • RXRDY: RXRDY Interrupt Enable • TXRDY: TXRDY Interrupt Enable • RXBRK: Receiver Break Interrupt Enable • ENDRX: End of Receive Transfer Interrupt Enable • ENDTX: End of Transmit Interrupt Enable • OVRE: Overrun Error Interrupt Enable • FRAME: Framing Error Interrupt Enable • PARE: Parity Error Interrupt Enable • TIMEOUT: Time-out Interrupt Enable • TXEMPTY: TXEMPTY Interrupt Enable • ITERATION: Iteration Interrupt Enable • TXBUFE: Buffer Empty Interrupt Enable • RXBUFF: Buffer Full Interrupt Enable • NACK: Non Acknowledge Interrupt Enable • RIIC: Ring Indicator Input Change Enable (2) • DSRIC: Data Set Ready Input Change Enable (2) • DCDIC: Data Carrier Detect Input Change Interrupt Enable (2) • CTSIC: Clear to Send Input Change Interrupt Enable • MANE: Manchester Error Interrupt Enable(1) Под описание больше всего подходит: • TXRDY: TXRDY Interrupt Enable • TXBUFE: Buffer Empty Interrupt Enable • TXEMPTY: TXEMPTY Interrupt Enable СУВ. Добавлено @ 23:01 Есть смысл посмотреть на: http://www.gaw.ru/pdf/Atmel/ARM/AT91SAM7S256_128_64_321_32.pdf страница 339. СУВ. |
| Автор: Ivan. 8.11.2006, 18:11 |
| лоханулся |
| Автор: xelax 10.11.2006, 10:10 |
| У Atmelа гораздо лучше продуманная работа с UARTом. Но у меня выхода нет, уже готовая железяка досталась на LPC. |