16.03.2011, 15:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от andries5
|
В файле stm8_interrupt_vector.c прописываю
{0x82, (interrupt_handler_t)TIM4_UPD_OVF_IRQHandler}, /* irq23 */
|
Не важно как функция называется.
Код:
|
// main.c
@far @interrupt void TIM3_UPD(void)
{
// обработчик
}
// stm8_interrupt_vector.c
extern @far @interrupt void TIM3_UPD(void); // прототип обязателен
...
// массив векторов
{0x82, (interrupt_handler_t)TIM3_UPD}, /* irq15 */ |
|
|
|
|
16.03.2011, 17:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.02.2008
Сообщений: 1,802
Сказал спасибо: 124
Сказали Спасибо 602 раз(а) в 419 сообщении(ях)
|
Re: FAQ по STM8
Все так и сделал, но постоянно выбрасывает на
@far @interrupt void NonHandledInterrupt (void)
в stm8_interrupt_vector.c
толи TIM4 UPD не IRQ23. Не понимаю.
Счет идет, SR устанавливается флаг прерывания, но не обрабатывается в нужной мне функции.
На @far @interrupt void NonHandledInterrupt (void)
выкидывает сразу после TIM4_Cmd(ENABLE);
если не разрешать прерывания, то взводится SR флаг прерывания, но понятно что нет его обработки.
Последний раз редактировалось andries5; 16.03.2011 в 17:20.
|
|
|
|
16.03.2011, 17:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от andries5
|
толи TIM4 UPD не IRQ23. Не понимаю.
|
Может и такое быть. Вектора в даташите с дырками, причем именно в части таймеров. Я точно знаю только про 2-ой и 3-ий таймеры. Можно ловушек понавесить на каждый вектор. Тогда будет точно понятно куда попадаем при прерывании.
|
|
|
|
16.03.2011, 17:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.02.2008
Сообщений: 1,802
Сказал спасибо: 124
Сказали Спасибо 602 раз(а) в 419 сообщении(ях)
|
Re: FAQ по STM8
Инициализация таймера
void tim4_init(void)
{
TIM4_DeInit();
/* Time base configuration */
TIM4_TimeBaseInit(TIM4_PRESCALER_2,0x7F );
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
enableInterrupts();
/* Enable TIM4 */
TIM4_Cmd(ENABLE);
}
Может здесь где-то ошибка?
Большое Вам спасибо за помощь.
|
|
|
|
16.03.2011, 17:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от andries5
|
Может здесь где-то ошибка?
|
Давайте все же по порядку. На какой то вектор Вы все же попадаете.
Что за кристалл, есть ли другие используемые вектора? Лучше перейти в https://kazus.ru/forums/showthread.php?t=20861 для конкретного разбора ситуации.
|
|
|
|
16.03.2011, 17:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.02.2008
Сообщений: 1,802
Сказал спасибо: 124
Сказали Спасибо 602 раз(а) в 419 сообщении(ях)
|
Re: FAQ по STM8
Сделал заглушки и вышел на IRQ2. Прерывание от CLK.
В CLK_ClockSwitchConfig() было включено прерывание Clock Switch interrupt, но если мне нужно знать момент их переключения, как же быть?
Последний раз редактировалось andries5; 16.03.2011 в 17:49.
|
|
|
|
16.03.2011, 17:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от andries5
|
Сделал заглушки и вышел на IRQ2. Прерывание от CLK.
|
Значит переключаетесь так - с обработчиком. Ну а попав в NonHandledInterrupt выхода уже нет. Ну а пока генератор запускается успевает таймер включиться. Но прерывание от такта приходит раньше, чем первое от таймера...
|
|
|
|
16.03.2011, 17:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от andries5
|
но если мне нужно знать момент их переключения, как же быть?
|
Ну так и напишите обработчик на это прерывание.
|
|
|
|
16.03.2011, 17:59
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.02.2008
Сообщений: 1,802
Сказал спасибо: 124
Сказали Спасибо 602 раз(а) в 419 сообщении(ях)
|
Re: FAQ по STM8
Значит перед разрешением прерываний, надо очистить флаг в CLK.
Спасибо за подсказки. У меня из головы уже шел пар.
|
|
|
|
16.03.2011, 18:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от andries5
|
Значит перед разрешением прерываний, надо очистить флаг в CLK.
|
Это не поможет. Пример - Вы запускаете процесс переключения такта и работаете дальше. Настраиваете таймер, разрешаете прерывания очистив флаг прерывания от такта и ждете прерываний от таймера. А тут как раз заканчивается переключение источника такта - взводится флажок и ... Вы опять на векторе по умолчанию. Так что либо не продолжать работу пока не переключится, либо иметь обработчик прерывания по переключению источника тактирования.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:43.
|
|