|
Странное поведение порта scmRTOS 4.0 для AVR/IAR на ATmega1284 |
|
|
|
Mar 14 2013, 09:08
|
Участник

Группа: Свой
Сообщений: 50
Регистрация: 10-05-12
Пользователь №: 71 756

|
scmRTOS 4.0, ATmega1284, порт для IAR, IAR EWAVR 6.20 Возникла проблема с прерываниями RX USART1. Вызовы обработчика прерывания RX оказались синхронизированы с прерываниями системного таймера (при scmRTOS_SYSTIMER_NEST_INTS_ENABLE 1) или вызов обработчика не происходил совсем (при scmRTOS_SYSTIMER_NEST_INTS_ENABLE 0). При этом необходимые биты в регистрах были установлены - RXCIE1 в UCSR1B, RXC1 в USCR1A, I в SREG. USART0 работал корректно. Причина проблемы по-видимому в переключения контекста scmRTOS с использованием программного прерывания (scmRTOS_CONTEXT_SWITCH_SCHEME 1), так как при scmRTOS_CONTEXT_SWITCH_SCHEME 0 проблема устраняется. Для переключения контекста в порте используется прерывание SPM_READY, которое имеет больший приоритет чем прерывания USART1. Пока у меня есть две версии того что происходит: 1. Прерывание USART1_RX вызывается только по фронту, при установке бита RXC1 в 1 и если в этот момент прерывания были запрещены после их разрешения прерывание USART1_RX больше вызвано не будет. Насколько я понимаю документацию, обработка прерываний от USART не должена так работать: Цитата When the Receive Complete Interrupt Enable (RXCIEn) in UCSRnB is set, the USART Receive Complete interrupt will be executed as long as the RXCn Flag is set (provided that global interrupts are enabled). 2. У контроллер прерываний ATmega1284 остались какие-то недокументированные особенности так как в Atmel никто не ожидал что прерывание SPM_READY будет использоваться без переноса таблицы векторов прерываний в область бутлоадера: Цитата When using the SPM interrupt, the Interrupt Vectors should be moved to the BLS section to avoid that an interrupt is accessing the RWW section when it is blocked for reading.
|
|
|
|
|
 |
Ответов
|
Mar 14 2013, 09:43
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (ex_AlexG @ Mar 14 2013, 11:08)  2. У контроллер прерываний ATmega1284 остались какие-то недокументированные особенности так как в Atmel никто не ожидал что прерывание SPM_READY будет использоваться без переноса таблицы векторов прерываний в область бутлоадера: Вы не поняли этот отрывок документации. Он предполагает использование этого прерывания по прямому назначению, т.е. для сигнализации окончания записи во флеш. В процессе записи NRWW-область флеша блокируется от чтения. Разблокировка производится специальной командой. А прерывание возникает до выполнения этой команды и будет пытаться считать вектор из заблокированной области. У нас же прерывание используется без записи и блокировки флеша, нас этот момент не задевает. QUOTE (ex_AlexG @ Mar 14 2013, 11:08)  Возникла проблема с прерываниями RX USART1. Вызовы обработчика прерывания RX оказались синхронизированы с прерываниями системного таймера Как-то это странно. Я уже не помню, как там организовано в порте для AVR, но гляньте сюда: http://electronix.ru/forum/index.php?showt...p;#entry1144842, возможно это ваш случай.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 14 2013, 17:29
|

Знающий
   
Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768

|
Цитата(Сергей Борщ @ Mar 14 2013, 13:43)  Как-то это странно. Я уже не помню, как там организовано в порте для AVR, но гляньте сюда: http://electronix.ru/forum/index.php?showt...p;#entry1144842, возможно это ваш случай. Да, очень похоже на мой случай. Это-же одна линейка - 164-324-644-1284. ex_AlexG, сделайте, как уже советовал Сергей Борщ,минимальный проект без РТОС. Я сделал вывод в uart1 массива по прерыванию RX USART1, стартуемый по таймеру - это около 10 строчек кода. Если хотите, могу выложить. И расскажите, пожалуйста, о результате.
--------------------
"Hello, word!" - 17 errors 56 warnings
|
|
|
|
|
Mar 15 2013, 04:29
|
Участник

Группа: Свой
Сообщений: 50
Регистрация: 10-05-12
Пользователь №: 71 756

|
Цитата(Сергей Борщ @ Mar 14 2013, 16:43)  Цитата(WHALE @ Mar 15 2013, 00:29)  Да, очень похоже на мой случай. Это-же одна линейка - 164-324-644-1284. ex_AlexG, сделайте, как уже советовал Сергей Борщ,минимальный проект без РТОС.
И расскажите, пожалуйста, о результате. Действительно похоже, у меня даже обработчики прерываний UART'ов тоже статические члены класса. Проект без RTOS делать я уже пробовал (просто закомментировал лишнее), такой вариант работает корректно. Не думаю что эффект вызывает ошибка в компиляторе, во всяком случае обработчик прерывания не выкидывается и его вызов в таблице векторов прерываний на месте. Сегодня проверю влияет ли на спецэффекты scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE, о результатах отпишусь. Проверил, прерывания USART1 обрабатываются корректно при scmRTOS_CONTEXT_SWITCH_SCHEME 1 если в конфигурации RTOS установить scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE 1
Сообщение отредактировал ex_AlexG - Mar 15 2013, 04:20
|
|
|
|
|
Mar 27 2013, 14:34
|

Знающий
   
Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768

|
Цитата(ex_AlexG @ Mar 15 2013, 08:29)  Проверил, прерывания USART1 обрабатываются корректно при scmRTOS_CONTEXT_SWITCH_SCHEME 1 если в конфигурации RTOS установить scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE 1 две недели мотался по командировкам,было не до проекта. Сейчас проверил- я ошибался,а правы _Артём_ ex_AlexG. то есть это глюк RTOS. А кто поддерживает ветку IAR AVR? ReAl? Что-то его не видно... В качестве баг-репорта прикладываю минимальный проект.
Прикрепленные файлы
TEST.TAR ( 6.26 мегабайт )
Кол-во скачиваний: 24
TEST.RAR ( 1.12 мегабайт )
Кол-во скачиваний: 25
--------------------
"Hello, word!" - 17 errors 56 warnings
|
|
|
|
Сообщений в этой теме
ex_AlexG Странное поведение порта scmRTOS 4.0 для AVR/IAR на ATmega1284 Mar 14 2013, 09:08     WHALE Цитата(Сергей Борщ @ Mar 28 2013, 16:33) ... Mar 28 2013, 16:20   ReAl Цитата(ex_AlexG @ Mar 15 2013, 07:29) Про... Apr 13 2013, 13:41 WHALE мда,не идет у меня прект,хоть тресни.
На тестовом... Apr 4 2013, 14:12 _Артём_ Цитата(WHALE @ Apr 4 2013, 17:12) На тест... Apr 4 2013, 15:19 WHALE _Артём_ тестовый проект с прямой передачей управле... Apr 4 2013, 16:22 _Артём_ Цитата(WHALE @ Apr 4 2013, 19:22) _Артём_... Apr 4 2013, 19:29  WHALE Цитата(_Артём_ @ Apr 4 2013, 22:29) Навер... Apr 5 2013, 04:52   _Артём_ Цитата(WHALE @ Apr 5 2013, 07:52) но с аб... Apr 5 2013, 06:12    WHALE Цитата(_Артём_ @ Apr 5 2013, 09:12) А пре... Apr 5 2013, 06:22     _Артём_ Цитата(WHALE @ Apr 5 2013, 09:22) при как... Apr 5 2013, 06:38
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|