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

 
 
> TEventFlag.Signal_isr()
abutorin
сообщение Mar 8 2015, 21:06
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 3-09-12
Пользователь №: 73 374



Доброго времени суток.
Пробую использовать TEventFlag для оповещения основного цикла программы о завершении передачи даннных через SPI на STM32F103. В основном цикле очищаю флаг события, записываю данные в регистр, начинаю ждать событие. В обработчике прерывания взвожу флаг события методом signal_isr. Все работает, но остается одна проблема, процесс ожидающий этого события пробуждается только после следующего планирования процессов по системному таймеру, т.е. только примерно через 1мс. Мне казалось что такой задержки быть не должно. Я что-то делаю не так, или непонимаю как это должно работать. Подскажите кто чем может.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SergNK
сообщение Jan 28 2017, 20:43
Сообщение #2


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

Группа: Свой
Сообщений: 139
Регистрация: 30-03-11
Из: Фаниполь (Минск)
Пользователь №: 63 991



Только сегодня добрался до проекта. Работа, однако!

Итак, дело действительно было в приоритетах и только в приоритетах.
Я их поправил и всё заиграло!
И вот что я сделал по-быстрому:
1. Назначил константы регистров и констант приоритетов:
CODE
#if defined __ARM_ARCH_6M__ // Cortex-M0(+)/Cortex-M1
NVIC_SYSPRI14 EQU 0xE000ED20 // System priority register (priority 12..15).
NVIC_PENDSV_PRI EQU 0x00C00000 // PendSV priority value (lowest)
NVIC_SYSPRI15 EQU 0xE000ED20 // System priority register (priority 12..15).
NVIC_ST_PRI EQU 0xC0000000 // SysTick priority value (lowest)
#else
NVIC_SYSPRI14 EQU 0xE000ED22 // System priority register (priority 14).
NVIC_PENDSV_PRI EQU 0xFF // PendSV priority value (lowest).
NVIC_SYSPRI15 EQU 0xE000ED23 // System priority register (priority 15).
NVIC_ST_PRI EQU 0xFF // SysTick priority value (lowest).
#endif

NVIC_ST_CTRL EQU 0xE000E010 // SysTick Ctrl & Status Reg.
NVIC_ST_RELOAD EQU 0xE000E014 // SysTick Reload Value Reg.
NVIC_ST_CTRL_CLK_SRC EQU 0x00000004 // Clock Source.
NVIC_ST_CTRL_INTEN EQU 0x00000002 // Interrupt enable.
NVIC_ST_CTRL_ENABLE EQU 0x00000001 // Counter mode.


2. Поправил загрузку приоритета PendSV в os_start:
CODE
os_start
#if defined __ARM_ARCH_6M__ // Cortex-M0(+)/Cortex-M1
LDR R1, =NVIC_SYSPRI14 // Set the SysTick exception priority (lowest)
LDR R2, =NVIC_PENDSV_PRI
LDR R3, [R1]
ADD R2, R3
STR R2, [R1]
#else
LDR R1, =NVIC_SYSPRI14 // Set the PendSV exception priority (lowest)
LDR R2, =NVIC_PENDSV_PRI
STRB R2, [R1]
#endif


3. Поправил загрузку приоритета SysTick в init_system_timer:
CODE
init_system_timer
#if defined __ARM_ARCH_6M__ // Cortex-M0(+)/Cortex-M1
LDR R1, =NVIC_SYSPRI15 // Set the SysTick exception priority (lowest)
LDR R2, =NVIC_ST_PRI
LDR R3, [R1]
ADD R2, R3
STR R2, [R1]
#else
LDR R1, =NVIC_SYSPRI15 // Set the SysTick exception priority (lowest)
LDR R2, =NVIC_ST_PRI
STRB R2, [R1]
#endif


Всем спасибо!

PS Хотел сделать по-красивому, как для mx-gcc, но не пошла строчка:

CODE
" LDR R1, =os_context_switch_hook \n" // call os_context_switch_hook();


Как сделать видимой для IAR-овского встроенного ассемблера адрес функции из другого модуля?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- abutorin   TEventFlag.Signal_isr()   Mar 8 2015, 21:06
- - DmitryM   Цитата(abutorin @ Mar 9 2015, 00:06) Добр...   Mar 9 2015, 06:08
- - Сергей Борщ   Цитата(abutorin @ Mar 8 2015, 23:06) Подс...   Mar 9 2015, 06:45
|- - abutorin   Цитата(Сергей Борщ @ Mar 9 2015, 09:45) В...   Mar 9 2015, 09:14
|- - Сергей Борщ   Цитата(abutorin @ Mar 9 2015, 11:14) Созд...   Mar 9 2015, 10:10
|- - abutorin   Цитата(Сергей Борщ @ Mar 9 2015, 13:10) В...   Mar 9 2015, 11:49
- - SergNK   Доброго дня! Решил поднять тему вот таким воп...   Jan 18 2017, 11:23
|- - Сергей Борщ   QUOTE (SergNK @ Jan 18 2017, 13:23) Вылет...   Jan 18 2017, 12:04
- - SergNK   Ща попробую Контекст портится после suspend(Proce...   Jan 18 2017, 12:41
- - SergNK   Словил за хвост эту проблему. Словами или кодом оп...   Jan 20 2017, 21:04
- - SergNK   Весь день просидел и пытался подобраться поближе к...   Jan 22 2017, 20:39
|- - AHTOXA   Извините за банальность, но не пробовали ли вы вык...   Jan 22 2017, 21:42
- - SergNK   Это было сделано в первую очередь. Я не новичок в ...   Jan 23 2017, 04:41
|- - AHTOXA   Не обижайтесь, но раз вы этого явно не написали, к...   Jan 23 2017, 06:23
- - SergNK   scmRTOS v5.1 IAR 7.70 Windows 10   Jan 23 2017, 15:46
|- - AHTOXA   Понятно. Свой порт под IAR для M0+? Давайте тепер...   Jan 23 2017, 16:41
- - SergNK   Да, не видно. То, что удалось словить, - это уже с...   Jan 23 2017, 17:15
|- - AHTOXA   Вы не ответили про порт. Что за порт? Покажите код...   Jan 23 2017, 17:19
- - SergNK   Простите, не понял сразу. CODEPendSV_Handler #if...   Jan 23 2017, 19:31
|- - AHTOXA   С обработчиком порядок, он один-в-один как в порте...   Jan 23 2017, 20:03
- - SergNK   Вот приоритеты: CODE//----------------------------...   Jan 23 2017, 20:23
|- - AHTOXA   Ага, вот оно! В M0 нет побайтового доступа к р...   Jan 23 2017, 21:09
|- - AHTOXA   Цитата(SergNK @ Jan 29 2017, 01:43) Как с...   Jan 28 2017, 20:56
||- - SergNK   Цитата(AHTOXA @ Jan 28 2017, 23:56) Код E...   Jan 28 2017, 21:31
|- - esaulenka   Цитата(SergNK @ Jan 28 2017, 23:43) Как с...   Jan 30 2017, 13:44
- - SergNK   Удалось-таки победить. Вот что вышло: Это обработ...   Feb 6 2017, 19:18
|- - dxp   QUOTE (SergNK @ Feb 7 2017, 02:18) Удалос...   Feb 7 2017, 07:18
- - SergNK   Можно. Я отладил код под Freescale M0+. Подчистить...   Feb 7 2017, 07:28
|- - dxp   QUOTE (SergNK @ Feb 7 2017, 14:28) Можно....   Feb 7 2017, 07:44
- - SergNK   Спасибо за доверие! Первый вариант.   Feb 7 2017, 08:14
- - dxp   QUOTE (SergNK @ Feb 7 2017, 15:14) Спасиб...   Feb 7 2017, 08:48


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

 


RSS Текстовая версия Сейчас: 23rd May 2024 - 20:51
Рейтинг@Mail.ru


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