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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Не генерируются прерывания в STR912
artur_off
сообщение Jan 5 2010, 09:28
Сообщение #1


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

Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784



Здравствуйте господа.

Возникла следующая проблема. В процессоре STR912 не хотят генерироваться прерывания. Вот код инициализации прерываний:

Код
VIC_DeInit();
                  VIC_InitDefaultVectors();
              
                    VIC_Config(TIM3_ITLine, VIC_IRQ, 0);
    VIC_ITCmd(TIM3_ITLine, ENABLE);



Прерывания в таймере также включены: TIM_ITConfig(TIM3, TIM_IT_OC1, ENABLE);

При отладке видно, что в VIC и в таймере прерывания настроены и таймер считает. Но при достижении значения счетного регистра равному регистру сравнения OC1R в прерывание заходить не хочет

Код
TIM_CounterCmd(TIM3, TIM_STOP);
          TIM_CounterCmd(TIM3, TIM_CLEAR);
              var_delay++;
          if(var_delay == 60000) var_delay = 0;
          TIM_ClearFlag(TIM3, TIM_FLAG_OC1);
          TIM_CounterCmd(TIM3, TIM_START);
    VIC0->VAR = 0xFF;




--------------------
 Big time. 
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Jan 5 2010, 09:38
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Я не пользуюсь ST библиотеками, и все нормально работает.

1) Другие прерывания есть ?

2) Глобально прерывания разрешены ?

3) в программе не получается так что сначала специализируется прерывание таймера к примеру в 0 слот, а потом при инициализации чего нить другого в этот слот назначаются другие прерывания ? тобиш одно прерывание перезаписывает другое.
Go to the top of the page
 
+Quote Post
artur_off
сообщение Jan 5 2010, 09:46
Сообщение #3


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

Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784



Сейчас настроено только одно прерывание - от таймера.
Пробовал возится с другими прерываниями - тоже самое.
Если вас не затруднит, можете показать свой пример?

Цитата
2) Глобально прерывания разрешены ?

А вот по поводу этого у меня есть сомнения.


--------------------
 Big time. 
Go to the top of the page
 
+Quote Post
artur_off
сообщение Jan 5 2010, 11:02
Сообщение #4


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

Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784



Переписал настройку VIC, но ничего не изменилось.
Код
u32 mask = 1;
    // Init VIC
    VIC_DeInit();
    // initialize VICs default vector registers
    VIC_InitDefaultVectors();
    
    // Configure TIM3 interrupt in VIC
    VIC0->VAiR[0] = (u32)(void*)(TIM3_IRQHandler);
    VIC0->INTSR &= ~(mask<<TIM3_ITLine);
    VIC0->VCiR[0] |= 0x20;
    VIC0->VCiR[0] &= 0xFFFFFFE0;
    VIC0->VCiR[0] |= TIM3_ITLine;
    VIC0->INTER |= (mask << TIM3_ITLine); // enable interrupt


--------------------
 Big time. 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 5 2010, 11:12
Сообщение #5


Гуру
******

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



Дык в CPSR-то прерывания разрешены?
Go to the top of the page
 
+Quote Post
artur_off
сообщение Jan 5 2010, 11:28
Сообщение #6


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

Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784



Цитата(aaarrr @ Jan 5 2010, 13:12) *
Дык в CPSR-то прерывания разрешены?


Не разрешены. Но не могу догнать, как их включить. Не могу нигде найти описание CPSR. Даже в reference manual.


--------------------
 Big time. 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 5 2010, 11:36
Сообщение #7


Гуру
******

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



Цитата(artur_off @ Jan 5 2010, 14:28) *
Не разрешены. Но не могу догнать, как их включить.

Стартап свой приложите.

Цитата(artur_off @ Jan 5 2010, 14:28) *
Не могу нигде найти описание CPSR. Даже в reference manual.

Искать нужно в reference manual на ядро.
Go to the top of the page
 
+Quote Post
artur_off
сообщение Jan 5 2010, 11:44
Сообщение #8


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

Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784



Цитата(aaarrr @ Jan 5 2010, 13:36) *
Стартап свой приложите.


Искать нужно в reference manual на ядро.



Не загружается файл.

CODE
; Enter Undefined Instruction Mode and set its Stack Pointer
MSR CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit
MOV SP, R0
SUB R0, R0, #UND_Stack_Size

; Enter Abort Mode and set its Stack Pointer
MSR CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit
MOV SP, R0
SUB R0, R0, #ABT_Stack_Size

; Enter FIQ Mode and set its Stack Pointer
MSR CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bit
MOV SP, R0
SUB R0, R0, #FIQ_Stack_Size

; Enter IRQ Mode and set its Stack Pointer
MSR CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit
MOV SP, R0
SUB R0, R0, #IRQ_Stack_Size

; Enter Supervisor Mode and set its Stack Pointer
MSR CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit
MOV SP, R0
SUB R0, R0, #SVC_Stack_Size



Я так понимаю, это здесь. 

Сообщение отредактировал Omen_13 - Jan 5 2010, 23:37
Причина редактирования: Оформление кода


--------------------
 Big time. 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 5 2010, 11:49
Сообщение #9


Гуру
******

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



Цитата(artur_off @ Jan 5 2010, 14:44) *
Не загружается файл. Где надо смотреть в стартапе?

Смотреть, что загружается в CPSR (команда MSR) перед уходом в C-часть. Если это "стандартный" кейловский STR91x.s, то прерывания в нем разрешены.

Цитата(artur_off @ Jan 5 2010, 14:44) *
Я так понимаю, это здесь. 

Да. Это последний MSR, или есть еще переход в SYSTEM/USER?
Go to the top of the page
 
+Quote Post
artur_off
сообщение Jan 5 2010, 11:56
Сообщение #10


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

Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784



Цитата(aaarrr @ Jan 5 2010, 13:49) *
Смотреть, что загружается в CPSR (команда MSR) перед уходом в C-часть. Если это "стандартный" кейловский STR91x.s, то прерывания в нем разрешены.


Да. Это последний MSR, или есть еще переход в SYSTEM/USER?



CODE
; Enter Supervisor Mode and set its Stack Pointer
MSR CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit
MOV SP, R0
SUB R0, R0, #SVC_Stack_Size

; Enter User Mode and set its Stack Pointer
MSR CPSR_c, #Mode_USR
IF :DEF:__MICROLIB

EXPORT __initial_sp

ELSE

MOV SP, R0
SUB SL, SP, #USR_Stack_Size

  ENDIF

вот последний MSR, дальше вход в main

после него при симуляции бит I в CPSR сбрасывается в 0.

Сообщение отредактировал Omen_13 - Jan 5 2010, 23:39
Причина редактирования: Оформление кода


--------------------
 Big time. 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 5 2010, 12:05
Сообщение #11


Гуру
******

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



Цитата(artur_off @ Jan 5 2010, 14:56) *
после него при симуляции бит I в CPSR сбрасывается в 0.

Значит все в порядке, прерывания глобально разрешены.
Go to the top of the page
 
+Quote Post
artur_off
сообщение Jan 5 2010, 12:08
Сообщение #12


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

Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784



А вот при отладке флаг I не сбрасывается.


--------------------
 Big time. 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 5 2010, 12:18
Сообщение #13


Гуру
******

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



Цитата(artur_off @ Jan 5 2010, 15:08) *
А вот при отладке флаг I не сбрасывается.

Т.е. после команды MSR CPSR_c, #Mode_USR, в младшем байте CPSR оказывается 0xD0?
Go to the top of the page
 
+Quote Post
artur_off
сообщение Jan 5 2010, 12:40
Сообщение #14


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

Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784



Цитата(aaarrr @ Jan 5 2010, 14:18) *
Т.е. после команды MSR CPSR_c, #Mode_USR, в младшем байте CPSR оказывается 0xD0?

0xD3

То есть вы стыкались с таким?
Причина редактирования: Избыточное цитирование


--------------------
 Big time. 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 5 2010, 12:46
Сообщение #15


Гуру
******

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



Цитата(artur_off @ Jan 5 2010, 15:40) *
То есть вы стыкались с таким?

Нет. У вас вообще получается, что последняя команда MSR не выполнена. Честно говоря, не знаю, как такое может быть sad.gif
А что происходит с CPSR в реальном железе, без отладчика?
Go to the top of the page
 
+Quote Post

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

 


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


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