16.02.2016, 06:36
|
|
Прописка
Регистрация: 07.02.2016
Сообщений: 139
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
Прерывания таймера tim3 stm32f429--disco
Здравствуйте.
Столкнулся с проблемой разного времени выхода на вектор прерывания. В cube установил высокий приоритет HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); у всех остальных HAL_NVIC_SetPriority(x, 0, 1);
Вот код void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
counter_time ++;
switch (counter_time)
{
case 1:
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
break;
case 2: HAL_GPIO_WritePin(GPIOE, GPIO_PIN_2, GPIO_PIN_SET); flag_1 = 1; break;
case 3: HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET); break;
case 4: HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET); counter_time =0;break;
}
}
void MX_TIM3_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig;
TIM_MasterConfigTypeDef sMasterConfig;
htim3.Instance = TIM3;
htim3.Init.Prescaler = 83;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 20;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&htim3);
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig);
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig);
}
Смотрел осциллографом GPIO_PIN_3 stm32f429. Все болтается (разное время между импульсами. Разница составляет 2,5 мкс ) такое ощущение что что-то выполняет какие то операции и не дает сразу перейти на вектор но что не понятно. Подскажите что делать ?
|
|
|
|
16.02.2016, 09:15
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Прерывания таймера tim3 stm32f429--disco
http://infocenter.arm.com/help/topic...4_r0p0_trm.pdf
Цитата:
|
3.9.1 Exception handling
The processor implements advanced exception and interrupt handling, as described in the
ARMv7-M Architecture Reference Manual.
To reduce interrupt latency, the processor implements both interrupt late-arrival and interrupt
tail-chaining mechanisms, as defined by the ARMv7-M architecture:
• There is a maximum of a 12 cycle latency from asserting the interrupt to execution of the
first instruction of the ISR when the memory being accessed has no wait states being
applied. The first instruction to be executed is fetched in parallel to the stack push.
• Returns from interrupts similarly take twelve cycles where the instruction being returned
to is fetched in parallel to the stack pop.
• Tail chaining requires 6 cycles when using zero wait state memory. No stack pushes or
pops are performed and only the instruction for the next ISR is fetched.
|
__________________
Осторожно , злой кот
|
|
|
|
16.02.2016, 10:37
|
|
Прописка
Регистрация: 07.02.2016
Сообщений: 139
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Прерывания таймера tim3 stm32f429--disco
Я сейчас возможно задам глупый вопрос. Но как мне это исправить?
|
|
|
|
16.02.2016, 11:19
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Прерывания таймера tim3 stm32f429--disco
А никак, в обшем случае! И дело тут не в АРМ. На более простых ПИК и АВР это тоже проблема. Логичнее будет не юзать прерывания для текущей задачи, юзать только хардварные фишки таймера и железа, или юзать под прелоад таймера, но это уже по задаче.
|
|
|
|
16.02.2016, 11:32
|
|
Прописка
Регистрация: 07.02.2016
Сообщений: 139
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Прерывания таймера tim3 stm32f429--disco
И не как не нельзя сделать программную опору временную ?
|
|
|
|
16.02.2016, 11:39
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Прерывания таймера tim3 stm32f429--disco
Таймер и есть опора. Значение таймера все время меняется. Вот его и используйте. Зачем по прерыванию таймера поднимать флаг в прерывании, если в основном цикле можно просто сравнивать значения?
|
|
|
|
16.02.2016, 11:50
|
|
Прописка
Регистрация: 07.02.2016
Сообщений: 139
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Прерывания таймера tim3 stm32f429--disco
Я это понимаю, хотел сначала так сделать но посчитал, что на прерываниях будет лучше сейчас понимаю что нет. Или что-то делаю с прерываниями не так.
|
|
|
|
16.02.2016, 12:13
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Прерывания таймера tim3 stm32f429--disco
Сообщение от Alex_golubev
|
И не как не нельзя сделать программную опору временную ?
|
Да можно, как угодно можно. Вопрос в точности, а в большинстве случаев она и не нужна.
Сообщение от Alex_golubev
|
хотел сначала так сделать но посчитал, что на прерываниях будет лучше сейчас понимаю что нет.
|
Хуже , лучше, зависит от задачи.
Сообщение от Alex_golubev
|
Или что-то делаю с прерываниями не так.
|
В данном случае явно что-то не так, сильно большой разлёт. Но для большинства задач это даже и незаметно.
|
|
|
|
16.02.2016, 12:21
|
|
Прописка
Регистрация: 07.02.2016
Сообщений: 139
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Прерывания таймера tim3 stm32f429--disco
dosikus пишите про 12 циклов задержки. Это точно не 2,5 мкс. Кроме контролера nvic нужно еще что-то настраивать ?
|
|
|
|
16.02.2016, 12:26
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Прерывания таймера tim3 stm32f429--disco
Пробуйте без HAL и SPL, все настраивается и работает на ура.
__________________
Осторожно , злой кот
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:34.
|
|