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

 
 
 
Reply to this topicStart new topic
> Прерывания STR730FZ2T7
Mustik
сообщение Oct 25 2011, 09:23
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 1-12-10
Пользователь №: 61 322



Добрый день.
Купил кит STR730-STK.
Вроде все понятно, вот возник вопрос на счет прерываний.
Буду рассказывать на примере прерывания от CAN0.
Как я понимаю, в конфигурационном файле CAN0IRQHandler содержит адрес функции void CAN0_IRQHandler (void) и ниже приведенный код настраивает прерывания:
CODE
LDR R0, =EIC_BASE
LDR R1, =0xE59F0000 ; LDR PC,[PC,#ofs] (High 16-bits)
STR R1, [R0, #IVR_OFS] ; Store into IVR[31:16]
LDR R1, =PRCCUCMU_Addr ; IRQ Address Table
LDR R2, =0x0FFF ; Offset Mask
AND R1, R1, R2 ; Mask Offset
LDR R2, =0xF3E0 ; Jump Offset = 0x03E0
; 0xFXXX is used to complete the
; LDR PC,[PC,#ofs]
; 0x03E0 = 0x03E8 - 8 (Prefetch)
; 0 = IVR Address + 0x3E8
ADD R1, R1, R2 ; Add Jump Offset
MOV R2, #64 ; Number of Channels
MOV R3, #SIR0_OFS ; Offset to SIR0
EIC_Loop MOV R4, R1, LSL #16 ; Use High 16-bits
STR R4, [R0, R3] ; Store into SIRx
ADD R1, R1, #4 ; Next IRQ Address
ADD R3, R3, #4 ; Next SIRx
SUBS R2, R2, #1 ; Decrement Counter
BNE EIC_Loop

У меня есть моя функция, допустим, void CAN0_IRQ (void). Как мне настроить прерывание, чтобы оно заходило в мою функцию.

Сообщение отредактировал Mustik - Oct 25 2011, 09:26
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 25 2011, 09:32
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Насколько я понимаю, свою функцию обработки прерывания следует назвать CAN0_IRQHandler(). Если линкер будет ругаться, что функция определена в двух местах, то найти закомментировать не свою функцию.
Go to the top of the page
 
+Quote Post
Mustik
сообщение Oct 25 2011, 10:54
Сообщение #3





Группа: Участник
Сообщений: 10
Регистрация: 1-12-10
Пользователь №: 61 322



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

Two registers are involved to supply the channel interrupt vector data to the EIC controller
(IVR[31:16] and SIR52[31:16]:
● Write in SIR52[31:16], i.e. in the upper part of the SIR register related to channel #52,
the memory address offset (or the jump offset) where the Interrupt Service Routine,
related to interrupt channel #7, starts.
● Insert the base jump address (or the jump opcode) in the most significant half of the
IVR register, i.e. IVR[31:16].

Я с ассемблером особо не дружу, знакомлюсь, для меня работа с базовыми адресами и сдвигами еще тяжеловата. Вроде и понятно, но тут же путаюсь.
Расскажите в двух словах, что от меня требуют.
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 25 2011, 12:52
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Mustik @ Oct 25 2011, 14:54) *
А вот, если я хочу создать свою функцию, как мне записывать в регистры её адрес что-ли, чтобы прерывание вызвало именно мою функцию?

Именно. Нужно программировать регистры контроллера прерываний. Код инициализации в программах-примерах делает и это в числе прочего.
В семействе STR7xx контроллер прерываний мудрёно-кривоватый. Да и само семейство уже умерло, если не ошибаюсь.
Кстати, всё это написано в мануале на МК. Пересказывать его не буду, неблагодарное это занятие.
Go to the top of the page
 
+Quote Post
Mustik
сообщение Oct 27 2011, 09:20
Сообщение #5





Группа: Участник
Сообщений: 10
Регистрация: 1-12-10
Пользователь №: 61 322



Цитата(scifi @ Oct 25 2011, 15:52) *
Именно. Нужно программировать регистры контроллера прерываний. Код инициализации в программах-примерах делает и это в числе прочего.
В семействе STR7xx контроллер прерываний мудрёно-кривоватый. Да и само семейство уже умерло, если не ошибаюсь.
Кстати, всё это написано в мануале на МК. Пересказывать его не буду, неблагодарное это занятие.

Если бы я понял, что они пишут в мануале, я бы и не создавал тему здесь.
Может кто-нибудь помочь?
Go to the top of the page
 
+Quote Post

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

 


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


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