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

 
 
> вопрос по LPC2138
tolik_zp
сообщение Apr 19 2007, 12:41
Сообщение #1


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

Группа: Участник
Сообщений: 127
Регистрация: 2-08-06
Пользователь №: 19 265



почему не работает прерывание от таймера? код такой:

T0PR=1000;
T0TCR=2;
T0MCR=3;
T0MR0=100000;
T0TCR=1;
VICIntSelect=(1<<4);
VICIntEnable=(1<<4);

обработчик:
#pragma vector=0x1C
__fiq __arm void FIQ_ISR_Handler (void)
{
IO0SET=(1<<31);
for (int j=0;j<3;j++);
IO0CLR=(1<<31);
T0MR0=10000;
T0IR=2;
}

в памяти по адресу 0x1c действительно находится переход на обработчик.


RTFM блин.... особенно первые страницы smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
zltigo
сообщение Apr 19 2007, 14:02
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Если бы дали себе труд по-человечески описать биты, то ошибки и не было.
Как Вы думаете, очень интересно копаться в россыпи мутных 1,2,3.... даже если хочется помочь?
Код
T0PR=1000;
T0TCR=TCR_RESET;
T0MCR=(MCR_MR0INT | MCR_MR0RES);
T0MR0=100000;
T0TCR=TCR_ENABLE;
VICIntSelect |=(1<<VIC_TIMER0); // !!! потенциальный bug
VICIntEnable=(1<<VIC_TIMER0);

обработчик:
#pragma vector=0x1C
__fiq __arm void FIQ_ISR_Handler (void)
{
volatile int j;
IO0SET=(1<<31);
//for (int j=0;j<3;j++);  // Да не будет этого цикла - будет j = 3 :)
for (j=0;j<3;j++);
IO0CLR=(1<<31);
//T0MR0=10000;   Лишнее
T0IR=IR_MR0INT; // Bug!!! было IR_MR1INT
}


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
tolik_zp
сообщение Apr 19 2007, 16:34
Сообщение #3


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

Группа: Участник
Сообщений: 127
Регистрация: 2-08-06
Пользователь №: 19 265



спасибо за совет, обязательно прийму к сведению.
вобщем прерывание у меня заработало - я просто забыл включить его в CPSR.
теперь другая проблема. по таймеру прерывание срабатывает, но обработчик ведет себя очень странно. есть следующий код:

#pragma vector=0x1C
__fiq __arm void Timer0Int (void)
{
volatile int r,g;

for (g=0;g<100000;g++)
{
IO0SET=(1<<31);
for (r=0;r<1000;r++);
IO0CLR=(1<<31);
for (r=0;r<1000;r++);
}

при прерывании от таймера пару раз дергается нога р0.31, после чего все безвозвратно виснет. что за чудеса?
Может в настройках иара надо что-то сделать? я там ничего не менял, кроме формата выходного файла. Работаю все время в режиме администратора. Может в линкере проблема? Вот кусок скрипта линкера:

-D_CSTACK_SIZE=1000
-D_IRQ_STACK_SIZE=400
-D_FIQ_STACK_SIZE=200
-D_SVC_STACK_SIZE=200
-D_ABT_STACK_SIZE=0
-D_UND_STACK_SIZE=0
-D_HEAP_SIZE=2000

-Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND
-Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE=RAMSTART-RAMEND
-Z(DATA)FIQ_STACK+_FIQ_STACK_SIZE=RAMSTART-RAMEND
-Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND
-Z(DATA)ABT_STACK+_ABT_STACK_SIZE=RAMSTART-RAMEND
-Z(DATA)UND_STACK+_UND_STACK_SIZE=RAMSTART-RAMEND
-Z(DATA)HEAP+_HEAP_SIZE=RAMSTART-RAMEND




и еще вот что. если из обработчика все убрать, т.е. в нем только сброс флага, то все работает нормально. такое впечатление, что что-то не то с регистрами.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Apr 19 2007, 16:40
Сообщение #4


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



а в main() бесконечный цикл то есть??

А вообще я правильно понимаю, что вы просто поморгать диодиком хотите? В этом случае у вас не разумно построен код- в обработчике таких больших задержек не делают. Надо в обработчике делать XOR пина, а не ждать 2 раза по 1000
Go to the top of the page
 
+Quote Post
tolik_zp
сообщение Apr 19 2007, 16:40
Сообщение #5


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

Группа: Участник
Сообщений: 127
Регистрация: 2-08-06
Пользователь №: 19 265



Цитата(jorikdima @ Apr 19 2007, 16:37) *
а в main() бесконечный цикл то есть??


есть. в нем моргает светодиод. но после первого входа в прерывание (если оно не пустое), то светодиод перестает моргать насовсем.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 22:46
Рейтинг@Mail.ru


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