Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (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. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)