|
Не генерируются прерывания в STR912 |
|
|
|
Jan 5 2010, 09:28
|

Частый гость
 
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Jan 5 2010, 09:46
|

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

|
Сейчас настроено только одно прерывание - от таймера. Пробовал возится с другими прерываниями - тоже самое. Если вас не затруднит, можете показать свой пример? Цитата 2) Глобально прерывания разрешены ? А вот по поводу этого у меня есть сомнения.
--------------------
Big time.
|
|
|
|
|
Jan 5 2010, 11:02
|

Частый гость
 
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Jan 5 2010, 11:28
|

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

|
Цитата(aaarrr @ Jan 5 2010, 13:12)  Дык в CPSR-то прерывания разрешены? Не разрешены. Но не могу догнать, как их включить. Не могу нигде найти описание CPSR. Даже в reference manual.
--------------------
Big time.
|
|
|
|
|
Jan 5 2010, 11:36
|
Гуру
     
Группа: Свой
Сообщений: 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 на ядро.
|
|
|
|
|
Jan 5 2010, 11:44
|

Частый гость
 
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Jan 5 2010, 11:49
|
Гуру
     
Группа: Свой
Сообщений: 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?
|
|
|
|
|
Jan 5 2010, 11:56
|

Частый гость
 
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Jan 5 2010, 12:40
|

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

|
Цитата(aaarrr @ Jan 5 2010, 14:18)  Т.е. после команды MSR CPSR_c, #Mode_USR, в младшем байте CPSR оказывается 0xD0? 0xD3 То есть вы стыкались с таким?
Причина редактирования: Избыточное цитирование
--------------------
Big time.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|