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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Помогите с прерыванием таймера, не срабатывает
coolibin
сообщение May 14 2009, 16:10
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 19-07-07
Пользователь №: 29 228



Использую IAR 4.41A, JLink J-Tag дебагер, RAM дебаг, стандартный cstartup.
Код:
CODE


void AT91F_TC_Open(AT91PS_TC TC_pt, unsigned int Mode, unsigned int TimerId)
//* Begin
{
unsigned int dummy;

//* First, enable the clock of the TIMER
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1<< TimerId ) ;

//* Disable the clock and the interrupts
TC_pt->TC_CCR = AT91C_TC_CLKDIS ;
TC_pt->TC_IDR = 0xFFFFFFFF ;

//* Clear status bit
dummy = TC_pt->TC_SR;
//* Suppress warning variable "dummy" was set but never used
dummy = dummy;
//* Set the Mode of the Timer Counter
TC_pt->TC_CMR = Mode ;

//* Enable the clock
TC_pt->TC_CCR = AT91C_TC_CLKEN ;
//* End
}

__ramfunc void timer0_c_irq_handler(void)
{
AT91PS_TC TC_pt = AT91C_BASE_TC0;
unsigned int dummy;
//* Acknowledge interrupt status
dummy = TC_pt->TC_SR;
//* Suppress warning variable "dummy" was set but never used
dummy = dummy;

}

...
AT91F_TC_Open(AT91C_BASE_TC0, TC_CLKS_MCK1024, AT91C_ID_TC0);

//* Open Timer 0 interrupt
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_TC0, 0x4, AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, timer0_c_irq_handler);
AT91C_BASE_TC0->TC_IER = AT91C_TC_COVFS;
AT91F_AIC_ClearIt(AT91C_BASE_AIC, AT91C_ID_TC0);
AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_TC0);

AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG;
...



код вроде сдерт с атмеловского примера, но прерывание все равно не генерируется. Причем если работать с флагом, а не с прерываниями, то все норм.

Сообщение отредактировал coolibin - May 14 2009, 16:12


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 14 2009, 16:31
Сообщение #2


Гуру
******

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



1. У обработчика нет модификатора __irq
2. В обработчике нет записи AIC_EOICR
Go to the top of the page
 
+Quote Post
coolibin
сообщение May 14 2009, 16:53
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 19-07-07
Пользователь №: 29 228



но в примере этого тоже не было(((


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение May 14 2009, 18:18
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Указанные aaarrr деяния могли скрываться внутри стартапа. Так что вы должны точно отдать себе отчет в правильности подключаемого стартапа, а не от фонаря.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 14 2009, 18:20
Сообщение #5


Гуру
******

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



Угу, пора уже памятку повесить, что смотреть/выкладывать, если не работают прерывания.
Go to the top of the page
 
+Quote Post
coolibin
сообщение May 15 2009, 16:20
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 19-07-07
Пользователь №: 29 228



Увы.
Я так понимаю __irq говорит компилятору автоматически создать т. н. обертку(при входе регистры в стек, при выходе из стека и т. п.). Я добавил в свой проект СStartUp.s79 из атмеловского примера. В атмеловском коде эта "обертка" написана вручную на асме. Ничего не изменилось. Прерывание как не вызывалось так и не вызывается, хотя программа куда то прыгает, а вот куда и почему не обрабатывается прерывание, это вопрос.


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
defunct
сообщение May 15 2009, 16:26
Сообщение #7


кекс
******

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



Цитата(coolibin @ May 15 2009, 19:20) *
Прерывание как не вызывалось так и не вызывается, хотя программа куда то прыгает, а вот куда и почему не обрабатывается прерывание, это вопрос.

Поставьте точку останова на адрес 0x18 и пройдитесь по шагам.
С отладчиком то это вопрос 5-ти минут.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение May 15 2009, 16:36
Сообщение #8


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Там вообще-то дофига стартапов. Какой именно?
У меня как раз все атмеловские примеры рабтали. Даже те, которые не должны бы были.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
coolibin
сообщение May 15 2009, 16:42
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 19-07-07
Пользователь №: 29 228



Держи!
Прикрепленные файлы
Прикрепленный файл  Cstartup.txt ( 10.21 килобайт ) Кол-во скачиваний: 99
 


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение May 15 2009, 16:55
Сообщение #10


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Я бы в код прерывания вставил что-нибудь полезное, заметное. А всякие отладчики выбросил бы в ближайшее мусорное ведро. Отладчик сделанный не своими руками - зло.

Сообщение отредактировал DpInRock - May 15 2009, 17:16


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
defunct
сообщение May 15 2009, 20:52
Сообщение #11


кекс
******

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



Цитата(DpInRock @ May 15 2009, 19:55) *
Я бы в код прерывания вставил что-нибудь полезное, заметное.

Конечно, это же "быстрее" чем пройтись по шагам от IRQ вектора до места где торчит проц и увидеть своими глазами куда и как он прыгает.

Цитата
А всякие отладчики выбросил бы в ближайшее мусорное ведро.

Смешно. Как раз тот случай, чем посмотреть и за пару минут решить проблему, лучше пользоваться дедовским светиком и третий день
менять стартапы.

Цитата
Отладчик сделанный не своими руками - зло.

Да-да, бабки в эпоху ленинской революции говорили, что поезда и лехтричество - это зло. Лучше телегой и со свечкой.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение May 15 2009, 21:39
Сообщение #12


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



У меня просто никогда не было никаких отладчиков и JTAG. Чисто от бедности (а не гордыни).
А тут - вот доказательство - наличие отладчика не помогат. Так что пока я прав.

Я бы для начала убедился, что проц на нужной скорости работает. Настроил бы UART. И горя не знал бы.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
defunct
сообщение May 15 2009, 23:06
Сообщение #13


кекс
******

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



Цитата(DpInRock @ May 16 2009, 00:39) *
У меня просто никогда не было никаких отладчиков и JTAG.

Ну симулятор тоже можно.. Надо то всего лишь протрассировать код IRQ.

Цитата
Я бы для начала убедился, что проц на нужной скорости работает. Настроил бы UART. И горя не знал бы.

Это работает когда костяк программы уже есть, IRQ обрабатываются и ведется отладка прикладной части.
А когда проблемы со стартапом - отладчик, причем любой формы (эмулятор, симулятор, JTAG и т.д.), наиболее эффективный способ.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение May 16 2009, 23:53
Сообщение #14


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Не работать прерывание может по многим причинам.

Вот у меня только что не работало прерывание от кодека. Три часа искал причину. Два бубна извел.
А просто вместо числа 0x20150618 писал (методом копи-пасте из другой программы) 20150618. А это был адрес памяти.
Которой в этом десятичном месте отродясь не бывало.
И проц вполне справедливо зависал упираясь в несуществующий обработчик данного события.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 17 2009, 00:44
Сообщение #15


Гуру
******

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



Цитата(DpInRock @ May 17 2009, 03:53) *
Не работать прерывание может по многим причинам.

Я вижу только две:
- непонимание архитектуры (самая распространенная)
- невнимательность

Цитата(DpInRock @ May 17 2009, 03:53) *
Вот у меня только что не работало прерывание от кодека. Три часа искал причину. Два бубна извел.
А просто вместо числа 0x20150618 писал (методом копи-пасте из другой программы) 20150618. А это был адрес памяти.
Которой в этом десятичном месте отродясь не бывало.
И проц вполне справедливо зависал упираясь в несуществующий обработчик данного события.

Ну вот, а кто-то тут недавно рассказывал, как это круто - вбивать все подряд цифирьками biggrin.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 1st July 2025 - 17:57
Рейтинг@Mail.ru


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