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

 
 
> Странное поведение порта scmRTOS 4.0 для AVR/IAR на ATmega1284
AlexG
сообщение Mar 14 2013, 09:08
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
WHALE
сообщение Apr 4 2013, 14:12
Сообщение #2


Знающий
****

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



мда,не идет у меня прект,хоть тресни.
На тестовом проекте при включении scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE 1 прерывания USART1 обрабатываются,в боевом проекте все равно нет.Хотя они точно возникают,но программа не аходит в обработчики прерываний.
Ладно, попытался включить прямую передачу управления #define scmRTOS_CONTEXT_SWITCH_SCHEME 0 -
не компилируется вовсе, линкер в ассемблерном файле OS_Target_asm.s90 не видит определения os_context_switcher и os_context_switch_hook.
Короче, все плохо.
Придется переписывать код в безосевом варианте,наверно...



--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Apr 4 2013, 15:19
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(WHALE @ Apr 4 2013, 17:12) *
На тестовом проекте при включении scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE 1 прерывания USART1 обрабатываются,в боевом проекте все равно нет.

Сравните конфигурации проектов (scmRTOS_CONFIG.h).

Цитата(WHALE @ Apr 4 2013, 17:12) *
Хотя они точно возникают,но программа не аходит в обработчики прерываний.

Откуда это известно?
Обработчики-то есть в программе?

Цитата(WHALE @ Apr 4 2013, 17:12) *
Ладно, попытался включить прямую передачу управления #define scmRTOS_CONTEXT_SWITCH_SCHEME 0 -
не компилируется вовсе, линкер в ассемблерном файле OS_Target_asm.s90 не видит определения os_context_switcher и os_context_switch_hook.

Что линкеру их обоих надо? Сомнительно как-то...
Или os_context_switch_hook - это context_switch_user_hook? Тогда в конфиге задайте
Код
#define  scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE  0

Или определите хук в своём коде. Только зачем он вам...

Цитата(WHALE @ Apr 4 2013, 17:12) *
Короче, все плохо.

Думаю, проблема у вас также с файлом OS_Target_asm.s90 - макросы scmRTOS_CONTEXT_SWITCH_SCHEME и другие не доходят до ассемблера, и возможно получается так, что в случае с прямой передачей линкер не может найти os_context_switcher и выдаёт ошибку, а в случае переключения через прерывание не линкует os_context_switch_hook и заменяет его на RETI (попробуйте убрать галку в настройках проекта которая заполняет неиспользуемые прерывания командой возврата - выскочит ошибки линкера?).
Наверное нужно задать в настройках проекта пути к файлам конфигурации или прописать в OS_Target_asm.s90 что-то типа такого:
Цитата
#include "<полный путь к файлу>\scmRTOS_CONFIG.h"
#include "<полный путь к файлу>\scmRTOS_TARGET_CFG.h"

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ex_AlexG   Странное поведение порта scmRTOS 4.0 для AVR/IAR на ATmega1284   Mar 14 2013, 09:08
- - Сергей Борщ   QUOTE (ex_AlexG @ Mar 14 2013, 11:08) 2. ...   Mar 14 2013, 09:43
|- - WHALE   Цитата(Сергей Борщ @ Mar 14 2013, 13:43) ...   Mar 14 2013, 17:29
|- - ex_AlexG   Цитата(Сергей Борщ @ Mar 14 2013, 16:43) ...   Mar 15 2013, 04:29
|- - WHALE   Цитата(ex_AlexG @ Mar 15 2013, 08:29) Про...   Mar 27 2013, 14:34
||- - Сергей Борщ   QUOTE (WHALE @ Mar 27 2013, 16:34) Что-то...   Mar 28 2013, 12:33
||- - 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, 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


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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 17:38
Рейтинг@Mail.ru


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