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

 
 
> Проблемы с таймером в AT91SAM7S64
Artem
сообщение Feb 26 2006, 05:53
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 4-02-05
Пользователь №: 2 424



Не получается работать с таймерами в AT91SAM7S64. Точнее с прерываниями от таймеров. Дело вот в чём: Инициализируем таймеры на прерывание при совпадении, запускаем.. При первом совпадении, прерывание происходит, в обработчике делаю: dummy = TC_pt->TC_SR;, всё вроде становится в исходный режим, таймер сбрасывается и продолжает считать, но при совпадении, флаг CPCS устанавливается, но прерывания не происходит.. Почему так?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Feb 26 2006, 21:50
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(defunct @ Feb 26 2006, 23:43) *
А зачем вложенные прерывания делать?! Специально чтобы работало неправильно?


Можно подумать, будто использование вложенных прерываний на ARM
кто-то объявил вне закона smile.gif
Встречный вопрос: поясните, почему неправильно?
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 27 2006, 02:41
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(aaarrr @ Feb 26 2006, 23:50) *
Цитата(defunct @ Feb 26 2006, 23:43) *

А зачем вложенные прерывания делать?! Специально чтобы работало неправильно?


Можно подумать, будто использование вложенных прерываний на ARM
кто-то объявил вне закона smile.gif
Встречный вопрос: поясните, почему неправильно?

я не говорю, что неправильно (в постах выше было сказано, что работает неправильно - затыкается таймер). Использование вложенных прерываний значительно усложняет структуру программы, и требует особой внимательности при проектировании программы. Любая неточность при проектировании может привести к тому, что устройство, выполнение обработчика прерывания которого было отложено на случайной команде, может сгенерировать уже следующее прерывание. А это следующее прерывание может потребовать совсем иной обработки, а вернувшись назад к отложенному обработчику мы это учесть не сможем. Собственно, что похоже и имеет место у уважаемого Master 'a:
Цитата
У меня так же перестают отрабатывать прерывания через некоторое время после запуска.
Go to the top of the page
 
+Quote Post
Master
сообщение Feb 27 2006, 10:02
Сообщение #4


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

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Цитата(defunct @ Feb 27 2006, 05:41) *
я не говорю, что неправильно ...

Давайте по порядочку.
Цитата
Использование вложенных прерываний значительно усложняет структуру программы
Разве? По мне, так наоборот упрощает. Особенно когда прерывание занимает некоторое время, в течение которого может произойти событие, которое необходимо наверняка обработать. В простейшем случае нужно лишь увеличить соответствующий стек.
Цитата
и требует особой внимательности при проектировании программы
Не надо сгущать краски, любая программа требует внимательности! Точка.
Цитата
Любая неточность при проектировании может привести к тому, что устройство, выполнение обработчика прерывания которого было отложено на случайной команде, может сгенерировать уже следующее прерывание.
Согласен. Но кто мешает написать обработчик, который не допустит срабатывание другого прерывания на СЛУЧАЙНОЙ команде?? Соответственно, пишем код грамотно.
Цитата
похоже и имеет место у уважаемого Master 'a
Спасибо за уважение. Однако мой случай несколько разнится с обсуждаемым. Моя проблема состоит в том, что программа работает, прерывания происходят, входные сообщения UART'а обрабатываются, но через некоторое время прерывания перестают обрабатываться, и дело, как выяснилось, не во вложенности - проверил путём запрещения прерываний перед выполнением функции внутри обработчика прерывания:
вместо
Код
        msr         CPSR_c, #ARM_MODE_SYS
сделал
Код
        msr         CPSR_c, #I_BIT | ARM_MODE_SYS

Возможно, стоит создать отдельную ветку...
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 27 2006, 11:33
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Master @ Feb 27 2006, 12:02) *
Цитата(defunct @ Feb 27 2006, 05:41) *

я не говорю, что неправильно ...

Давайте по порядочку.
Цитата
Использование вложенных прерываний значительно усложняет структуру программы
Разве?

Конечно! Если вам кажется, что наоборот, так это только кажется.

Цитата
По мне, так наоборот упрощает. Особенно когда прерывание занимает некоторое время, в течение которого может произойти событие, которое необходимо наверняка обработать.

Для такого редкого и важного события существует FIQ. Для всех остальных - IRQ.

Цитата
Согласен. Но кто мешает написать обработчик, который не допустит срабатывание другого прерывания на СЛУЧАЙНОЙ команде?? Соответственно, пишем код грамотно.

Вы уже продемонстрировали, как надо правильно писать обработчик (и вам ведь никто не мешал), странно только почему же прерывания затыкаются? может все-таки что-то не учитытваете?

Цитата
Моя проблема состоит в том, что программа работает, прерывания происходят, входные сообщения UART'а обрабатываются, но через некоторое время прерывания перестают обрабатываться,
Проблема была ясна еще из предыдущего поста, зачем же повторяться? ;>

Цитата
и дело, как выяснилось, не во вложенности - проверил путём запрещения прерываний перед выполнением функции внутри обработчика прерывания:
А в чем же тогда? Не бывает ничего просто так. Проблему ищите только в обработчиках.


PS: Если мой пост вам покажется грубым, извините я сегодня очень "не в духе", если можно так выразиться..

Сообщение отредактировал defunct - Feb 27 2006, 11:38
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Artem   Проблемы с таймером в AT91SAM7S64   Feb 26 2006, 05:53
- - aaarrr   Проверьте в листинге, действительно ли происходит ...   Feb 26 2006, 09:55
- - Master   Цитата(Artem @ Feb 26 2006, 08:53) Не пол...   Feb 26 2006, 16:23
- - DASM   народ, а нафига вы разрешаете прерывания до выхода...   Feb 26 2006, 16:28
- - aaarrr   Как зачем? А как иначе вложенные прерывания делать...   Feb 26 2006, 16:33
|- - defunct   Цитата(aaarrr @ Feb 26 2006, 18:33) Как з...   Feb 26 2006, 20:43
- - DASM   да, только по-моему вложенные не нужны тут были..   Feb 26 2006, 16:35
- - aaarrr   Цитата(defunct @ Feb 27 2006, 14:33) Вы у...   Feb 27 2006, 13:55
|- - defunct   Цитата(aaarrr @ Feb 27 2006, 15:55) Утвер...   Feb 28 2006, 01:59
- - aaarrr   Цитата(defunct @ Feb 28 2006, 04:59) Даже...   Feb 28 2006, 02:51
|- - defunct   Цитата(aaarrr @ Feb 28 2006, 04:51) Не по...   Feb 28 2006, 05:08
- - Artem   Не понял, что имеется в виду - запись в AIC_EOICR ...   Feb 28 2006, 05:06
- - Artem   проблема то может и "прозрачная", но я т...   Feb 28 2006, 05:23
- - aaarrr   Цитата(defunct @ Feb 28 2006, 08:08) Имее...   Feb 28 2006, 08:29


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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 15:16
Рейтинг@Mail.ru


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