|
Множественные прерывания в TimerB, Выполняется только наиболее приоритетное, остальных будто нет |
|
|
|
Aug 20 2007, 20:38
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Приведите фрагмент кода обработчика прерывания. Думаю там у вас ошибка в ветвлении. Для нормального ветвления по значению этого вектора нужно только один раз при входе в прерывание считывать TBIV, иначе каждое его чтение уменьшает вложенность количество запросов прерываний. Пример. Код #pragma vector=TIMERB1_VECTOR #pragma type_attribute=__interrupt void TimerB1_ISR(void) { unsigned int reg; reg=TBIV; switch(reg) { case 0x02: // обработчик от TBCCR1 break; case 0x0E: //обработчик прерывания от переполнения break; default: //все остальные не используем break; } } Ну и не следует забывать, что у таймераB два вектора прерываний. Один для TBCCR0, и второй для всех остальных.
|
|
|
|
|
Aug 20 2007, 20:52
|
Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 11-03-07
Из: Украина, Харьков
Пользователь №: 26 059

|
Код // Timer_B7 Interrupt Vector (TBIV) handler #pragma vector=TIMERB1_VECTOR __interrupt void Timer_B1_6(void) { switch( TBIV ) { case 2: P1OUT ^= 0x01;//здесь ставится Breakpoint чтобы убедиться что попадаем //по захвату break; case 14: P1OUT ^= 0x01;//здесь ставится Breakpoint чтобы убедиться что попадаем //по переполнению break; } }
// Timer_B7 Interrupt Vector (TBIV) handler #pragma vector=TIMERB0_VECTOR __interrupt void Timer_B0(void) { static unsigned char tmp = 0; tmp++; //пока просто дабы убедиться что попадаем сюда } Вот примерно так. Реальные обработчики я заменил переключением ножки контроллера, дабы не захламлять код. Про два вектора знаю. Учел. Прикол с однократным считыванием TBIV вроде тоже учел. Но проблема остается -- если разрешены все прерывания, то обрабатывается только наиболее приоритетное. Как только оно запрещается - обрабатывается следующее по приоритету - в моем случае обработчик переполнения
|
|
|
|
|
Aug 21 2007, 04:25
|
Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 11-03-07
Из: Украина, Харьков
Пользователь №: 26 059

|
Цитата(rezident @ Aug 21 2007, 00:19)  несмотря на "останов по бряку" таймер в железе продолжает "щелкать", а прерывания формироваться. Я перехожу на MSP с AVR. В АВР в настройках IAR была возможность на время программного останова останавливать таймера. в ИАРе для MSP я такой возможности не нашел. Ее не существует или я плохо искал? Но что касается счетчиков вместо ногодрыгалки - обязательно посмотрю. Спасибо большое P.S. Смущает, правда, тот момент, что если я ставлю breakpoint только в ветви с менее приоритетным прерыванием, то (при разрешенном более приоритетном) контроллер в эту ветвь не заходит. Будем искать
Сообщение отредактировал korobov_michael - Aug 21 2007, 05:04
|
|
|
|
|
Aug 21 2007, 06:19
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(korobov_michael @ Aug 21 2007, 07:25)  P.S. Смущает, правда, тот момент, что если я ставлю breakpoint только в ветви с менее приоритетным прерыванием, то (при разрешенном более приоритетном) контроллер в эту ветвь не заходит. Будем искать Может я и не копал глубоко, но у меня сложилось впечатление, что использование точек останова в прерываниях MSP действительно более непредсказуемо, чем у того же AVR. Но я достаточно легко мирюсь с этим.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Aug 21 2007, 08:51
|
Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 11-03-07
Из: Украина, Харьков
Пользователь №: 26 059

|
Цитата(shasik @ Aug 21 2007, 08:35)  Плохо Искали. Есть. Если можно, укажите, пожалуйста, где его искать. Лично я не нашел. Поскольку у меня все еще имеются сомнения насчет возможности останова таймеров при программном стопе, скажите, пожалуйста, может быть, имеются какие-то специфические приемы при отладке?
|
|
|
|
|
Aug 21 2007, 10:20
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188

|
Цитата(korobov_michael @ Aug 21 2007, 11:51)  Если можно, укажите, пожалуйста, где его искать. Лично я не нашел. Когда запускаете программу в IAR, то появляется новая панелька, там есть кнопка с изображением часиков - ее нужно нажать. Или то же самое через пункты меню Emulator->Advanced->Clock Cotrol. Нажав на кнопку/выбрать пункт меню, вываливается окошко с несколькими chekbox'ами: Stop ACKL on emulation stop, Stop SMCKL on emulation stop или что-то подобное. Одно но! Сам я никогда этой приблудой не пользовался. Для чего она нужна и работает ли она вообще точно не знаю. Хотя смысл в принципе понятен... Расскажите потом, что у Вас получилось
|
|
|
|
|
Aug 21 2007, 12:53
|
Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 11-03-07
Из: Украина, Харьков
Пользователь №: 26 059

|
Цитата(shasik @ Aug 21 2007, 13:20)  Когда запускаете программу в IAR, то появляется новая панелька, там есть кнопка с изображением часиков - ее нужно нажать. Или то же самое через пункты меню Emulator->Advanced->Clock Cotrol. Нажав на кнопку/выбрать пункт меню, вываливается окошко с несколькими chekbox'ами: Stop ACKL on emulation stop, Stop SMCKL on emulation stop или что-то подобное.
Одно но! Сам я никогда этой приблудой не пользовался. Для чего она нужна и работает ли она вообще точно не знаю. Хотя смысл в принципе понятен... Расскажите потом, что у Вас получилось Мгм... С радостью увидел твой пост. Но, увы, F148 не имеет, похоже, этого пресловутого EnhancedEmulationModule  жаль
|
|
|
|
|
Aug 21 2007, 15:22
|
Частый гость
 
Группа: Новичок
Сообщений: 136
Регистрация: 18-08-06
Из: Novosibirsk
Пользователь №: 19 655

|
Цитата(korobov_michael @ Aug 21 2007, 15:51)  может быть, имеются какие-то специфические приемы при отладке? Конечно! (1) Отладочная печать (или "дрыгание ножкой") для того чтобы понять как именно проявляет себя ошибка и (2) внимательное чтение текста в поисках ошибки - самый старый и по-прежнему самый эффективный метод отладки. Он появился ещё до изобретения мышей и окон и наверняка их переживёт. Отсутствие необходимости возиться ещё и с отладчиком оставляет больше времени на самое главное - пункт (2).  P.S. Шутки шутками, но из предыдущего обсуждения не понятно - Вы без отладчика, в естественной, так сказать среде, проверяли? Судя по тексту - должно работать.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|