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

 
 
> STM32F10x, не перестаёт удивлять
pr0m
сообщение Feb 6 2011, 20:02
Сообщение #1


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

Группа: Участник
Сообщений: 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


--------------------
Правильно поставленный вопрос - половина ответа...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
pr0m
сообщение Feb 7 2011, 17:53
Сообщение #2


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

Группа: Участник
Сообщений: 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) *
Так если не конфигурили, то у всех прерываний был одинаковый приоритет, потому и не вытесняло.

Ненене (с) sm.gif ПОДприоритеты назначал разные. Группа была одна. Из шаблона проекта унаследовал - там переключался NVIC на 0 групп.
Цитата(AHTOXA @ Feb 7 2011, 20:32) *
Главный документ касательно ядра Cortex-M3 -- Cortex-M3 Technical Reference Manual.

Угумс, первоисточник-с.

И что ж это получается, господа - NVIC у STM32 - кастрированный??? sm.gif В армовской спецификации у него вон скока бит для приоритетов!


--------------------
Правильно поставленный вопрос - половина ответа...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - sonycman   Цитата(pr0m @ Feb 7 2011, 20:53) И что ж ...   Feb 7 2011, 18:05
|- - 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


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

 


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


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