реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> LPC2387 сбросить бит THRE
megajohn
сообщение Dec 28 2011, 12:34
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



в, общем есть такая задача - передавать по UART сначала по поллингу U0LSR & TEMT, а по завершению передачи, разрешить прерывание U0IER |= THRE (1 << 1)
но сразу же вываливаюсь в прерывание VICIRQ_UART0

вопрос, как вручную сбросить флаг THRE в U0LSR чтобы не возникало прерывания по разрешению ?

согласно UM10211 это можно сделать так: The THRE interrupt is reset when a UnTHR write occurs or a read of the UnIIR occurs and the THRE is the highest interrupt (UnIIR[3:1] = 001).
пробую после передачи читать U0IIR результат, получается 0b00000000000000000000000011000001 что не соответствует маске THRE и соовтесвенно по разрешению U0IER |= THRE влетаю в VICIRQ_UART0

Сообщение отредактировал megajohn - Dec 28 2011, 12:36


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
_NB
сообщение Dec 28 2011, 13:54
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 92
Регистрация: 22-06-05
Из: Украина, г.Боярка
Пользователь №: 6 238



Цитата(megajohn @ Dec 28 2011, 14:34) *
согласно UM10211 это можно сделать так: The THRE interrupt is reset when a UnTHR write occurs or a read of the UnIIR occurs and the THRE is the highest interrupt (UnIIR[3:1] = 001).

Это работает, если прерывание разрешено.
Попробуйте выполнить TX FIFO RESET (если FIFO используется).
Но очень похоже на то, что это особенность работы UART LPC23xx
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 01:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01345 секунд с 7
ELECTRONIX ©2004-2016