|
STM32F10x, не перестаёт удивлять |
|
|
|
Feb 6 2011, 20:02
|
Частый гость
 
Группа: Участник
Сообщений: 183
Регистрация: 22-06-05
Из: Таганрог
Пользователь №: 6 233

|
Полдня чесал репу и разлохматил бубен на казалоь бы ровном месте... А именно: имеем некий код в основном цикле, с временем исполнения, определяемым периодом таймера. Таймер запускается перед контролируемым кодом, тот в цикле делает свои дела, а выходит по флагу, к-й устанавливается в обработчике прерывания (Update Event) этого таймера. Таймер запускается перед этим блоком. По так и невыясненным причинам, всё работало после ресета до того момента, пока не происходило некое внешнее прерывание (с приоритетом ниже таймера), делающее быстро другие примитивные дела, не относящиеся к интересующему участку кода. После этого начинались чудеса - на очередном внешнем цикле после запуска таймера код лихо проскакивал проверку while(!bStopDSS), даже не заглянув внутрь, и происходило 2! прерывания от таймера, одно из которых видимо и устанавливало bStopDSS=1 до входа во внутренний цикл. Вылечил проверкой флага прерывания перед включением таймера. Перекорячивается конвейер команд? При включении таймера (строка TIM3->CR1 |= TIM_CR1_CEN) ещё не сброшен бит прерывания? Код volatile uint8_t bStopDSS; while(1) // внешний цикл { bStopDSS = 0; TIM3->CNT = 0; TIM3->SR = ~TIM_IT_Update; while(TIM3->SR & TIM_IT_Update); // без этой проверки - чудеса TIM3->CR1 |= TIM_CR1_CEN;
while(bStopDSS == 0) { // Внутренний цикл, выходим по таймеру. } // ...готовимся к следующему циклу // }
void TIM3_IRQHandler (void) { // Сбрасываем флаг прерывания TIM3->SR = ~TIM_IT_Update; // Останавливаем таймер TIM3->CR1 &= ~TIM_CR1_CEN; // Флаг окончания внутреннего цикла bStopDSS = 1; } Такие дела. В голове смятение.
Сообщение отредактировал pr0m - Feb 6 2011, 20:05
--------------------
Правильно поставленный вопрос - половина ответа...
|
|
|
|
|
 |
Ответов
|
Feb 7 2011, 17:53
|
Частый гость
 
Группа: Участник
Сообщений: 183
Регистрация: 22-06-05
Из: Таганрог
Пользователь №: 6 233

|
Разобрался. sonycman прав. 15 подгрупп после ресета. У меня в коде инициализации, т.к. делал не с нуля проект, а взял шаблон, было вот это: Код /* 0 bit for pre-emption priority, 4 bits for subpriority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
В хидере: #define NVIC_PriorityGroup_0 ((uint32_t)0x700) /*!< 0 bits for pre-emption priority 4 bits for subpriority */ #define NVIC_PriorityGroup_1 ((uint32_t)0x600) /*!< 1 bits for pre-emption priority 3 bits for subpriority */ #define NVIC_PriorityGroup_2 ((uint32_t)0x500) /*!< 2 bits for pre-emption priority 2 bits for subpriority */ #define NVIC_PriorityGroup_3 ((uint32_t)0x400) /*!< 3 bits for pre-emption priority 1 bits for subpriority */ #define NVIC_PriorityGroup_4 ((uint32_t)0x300) /*!< 4 bits for pre-emption priority 0 bits for subpriority */ Т.е. переключался на 0 групп. Сейчас вот так: Код /* 2 bit for pre-emption priority, 2 bits for subpriority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); Цитата(AHTOXA @ Feb 7 2011, 20:32)  Так если не конфигурили, то у всех прерываний был одинаковый приоритет, потому и не вытесняло. Ненене (с)  ПОДприоритеты назначал разные. Группа была одна. Из шаблона проекта унаследовал - там переключался NVIC на 0 групп. Цитата(AHTOXA @ Feb 7 2011, 20:32)  Главный документ касательно ядра Cortex-M3 -- Cortex-M3 Technical Reference Manual. Угумс, первоисточник-с. И что ж это получается, господа - NVIC у STM32 - кастрированный???  В армовской спецификации у него вон скока бит для приоритетов!
--------------------
Правильно поставленный вопрос - половина ответа...
|
|
|
|
Сообщений в этой теме
pr0m STM32F10x Feb 6 2011, 20:02 akimych Интересно то, что после while(TIM3->SR & TI... Feb 6 2011, 21:29 AHTOXA Цитата(pr0m @ Feb 7 2011, 01:02) Такие де... Feb 7 2011, 06:06 pr0m Цитата(AHTOXA @ Feb 7 2011, 09:06) Попроб... Feb 7 2011, 08:42  AHTOXA Цитата(pr0m @ Feb 7 2011, 13:42) Флаг UEV... Feb 7 2011, 09:16   pr0m Цитата(AHTOXA @ Feb 7 2011, 12:16) Однако... Feb 7 2011, 12:20 pr0m Победил. Не была задана группировка с вытеснением ... Feb 7 2011, 14:18 sonycman Цитата(pr0m @ Feb 7 2011, 17:18) Задал пр... Feb 7 2011, 15:21  pr0m Цитата(sonycman @ Feb 7 2011, 18:21) Так ... Feb 7 2011, 15:39   sonycman Цитата(pr0m @ Feb 7 2011, 18:39) Высший-т... Feb 7 2011, 16:04    AHTOXA Цитата(sonycman @ Feb 7 2011, 21:04) По у... Feb 7 2011, 16:17     sonycman Цитата(AHTOXA @ Feb 7 2011, 19:17) Ненене... Feb 7 2011, 16:25      pr0m Цитата(sonycman @ Feb 7 2011, 19:25) Так ... Feb 7 2011, 16:57       sonycman Цитата(pr0m @ Feb 7 2011, 19:57) Нет, одн... Feb 7 2011, 17:11        pr0m Цитата(sonycman @ Feb 7 2011, 20:11) Хм, ... Feb 7 2011, 17:17       AHTOXA Цитата(pr0m @ Feb 7 2011, 21:57) Нет, одн... Feb 7 2011, 17:15        sonycman Цитата(AHTOXA @ Feb 7 2011, 20:15) Всё же... Feb 7 2011, 17:22        pr0m Цитата(AHTOXA @ Feb 7 2011, 20:15) Всё же... Feb 7 2011, 17:31         AHTOXA Цитата(pr0m @ Feb 7 2011, 22:22) А моя пр... Feb 7 2011, 17:32         KnightIgor Цитата(pr0m @ Feb 7 2011, 18:31) А моя пр... Feb 7 2011, 17:58          pr0m Цитата(KnightIgor @ Feb 7 2011, 20:58) По... Feb 7 2011, 18:05      AHTOXA Цитата(sonycman @ Feb 7 2011, 21:04) По у... Feb 7 2011, 17:06  pr0m Цитата(sonycman @ Feb 7 2011, 21:05) В эт... Feb 7 2011, 18:11 akimych Цитата1) Для детерминированности времени исполнени... Feb 7 2011, 19:06 pr0m Цитата(akimych @ Feb 7 2011, 22:06) Стран... Feb 7 2011, 19:31 akimych ЦитатаВ этой ветке переплелись мои вопросы по двум... Feb 7 2011, 21:24 pr0m Цитата(akimych @ Feb 8 2011, 00:24) На сч... Feb 8 2011, 07:03  ReAl Цитата(pr0m @ Feb 8 2011, 09:03) Там долж... Feb 8 2011, 23:27 akimych ЦитатаВы наверное имеете ввиду доступ к bit-bandin... Feb 8 2011, 22:00 pr0m Цитата(akimych @ Feb 9 2011, 01:00) А что... Feb 9 2011, 16:48  ReAl Цитата(pr0m @ Feb 9 2011, 18:48) Не знаю.... Feb 9 2011, 21:08   pr0m Цитата(ReAl @ Feb 10 2011, 00:08) Значени... Feb 10 2011, 06:06    vmp Цитата(pr0m @ Feb 10 2011, 09:06) Спасибо... Feb 10 2011, 07:39     pr0m Цитата(vmp @ Feb 10 2011, 10:39) Преимуще... Feb 10 2011, 12:19    ReAl Цитата(pr0m @ Feb 10 2011, 08:06) Спасибо... Feb 10 2011, 14:07     pr0m Цитата(ReAl @ Feb 10 2011, 17:07) Проблем... Feb 10 2011, 21:48 pr0m Красиво, получается, но основной недостаток - чуть... Feb 11 2011, 14:31 akimych В принципе, запись в буфер и запись в регистр ЦАП-... Feb 13 2011, 02:17 pr0m Цитата(akimych @ Feb 13 2011, 05:17) Изме... Feb 13 2011, 07:03
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|