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

 
 
> Прерывания в компиляторе RealView, IRQ или FIQ?
SanyaKID
сообщение Jun 27 2007, 07:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 13-09-06
Пользователь №: 20 359



Разбирались мы тут с прерываниями и накопали вот что. Компилятор armcc не делает разницы между IRQ и FIQ перываниями, и использует как в IRQ так и в FIQ режимах общие регистры R0-R7, сохраняя их в стеке при входе прерывания.
А вот в описании архитектуры ARM7TDMI сказано что в режиме FIQ регистры R8-R14 в нутри прерывания это banked registers, то есть они не пересекаются с регистрами R8-R14 вне прерывания и их не надо класть в стек.
Так вот, может кто знает, можно ли как-нибуть указать компилятору, чтобы он пользовался этими banked register, а не общими? Хотя и экономится всего 2 команды, но ради научного интереса хочется выжать из Fast Interrupta все на что он способен! smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SanyaKID
сообщение Jul 24 2007, 09:05
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 13-09-06
Пользователь №: 20 359



Ничего себе сколько тут уже понаписали... Вообщем-то вопрос насколько я помню, ставился так: умеет ли RealView работать с FIQ или нет. Оказалось что нет. И вполне понятно, что чтобы полностью использовать все прелести FIQ в данном компиляторе надо писать на ASM.

Тут кто-то просил исходники...

Это что касается обработчика
Код
void i2c_init()
{     
       PINSEL0       = 0x50;                         //Switch GPIO to I2C pins
        
    I2C0ADR = SLAVE_ADR;            
    I2C0CONSET = 0x44;                                                                                                
    VICIntSelect = 0x00000200;        
//VICVectCntl1 = 0x00000029;                  
//VICVectAddr1 = (unsigned)I2CISR;            

    I2C_ENABLE;                        
}

void I2CISR (void) __irq                        //I2C interrupt routine
{
    ...
}


А это в стартапе

Код
FIQ_Addr        DCD     FIQ_Handler
...
FIQ_Handler     B       I2CISR
...
                IMPORT  I2CISR


Так вот, у такого подхода, кроме того что такой обработчик будет вызываться немного быстрее чем просто IRQ, неожиданно появился новый плюс.
В проекте используется операционка RTX от Keil, в которой соответственно используются прерывания от таймера. Мне необходимо записывать во внутреннюю флеш. В IAP в момент записи нужно запрещать прерывания или убирать их в RAM. Однако нужно чтобы I2C все равно работал в момент записи.
В итоге, в теории, чтобы не ковыряться с прерыванием от таймера в RTX, можно запретить все IRQ на время записи/стирания флеша, а обработчик FIQ для I2c поместить в RAM. Кроме того для работы FIQ достаточно в RAM поместить только сам обработчик, так как его адрес лежит в регистре.

Щас попробую све это забацать. Посмотрим как будет работать.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SanyaKID   Прерывания в компиляторе RealView   Jun 27 2007, 07:17
- - GetSmart   Из ваших слов в стеке сохраняются только R0-R7. Та...   Jun 27 2007, 08:00
- - zltigo   Цитата(SanyaKID @ Jun 27 2007, 10:17) Так...   Jun 27 2007, 08:15
- - SpiritDance   В realView при описании обработчика IRQ на С испол...   Jun 27 2007, 08:41
|- - SanyaKID   Цитата(SpiritDance @ Jun 27 2007, 12:41) ...   Jun 27 2007, 09:29
|- - SpiritDance   Цитата(SanyaKID @ Jun 27 2007, 13:29) А в...   Jun 27 2007, 09:39
|- - SanyaKID   Цитата(SpiritDance @ Jun 27 2007, 13:39) ...   Jun 27 2007, 09:50
|- - Andy_ry   В STR91x лучше дело обстоит - для FIC выделен ...   Jul 11 2007, 09:00
|- - a3r3   Цитата(Andy_ry @ Jul 11 2007, 13:00) В ST...   Jul 11 2007, 09:30
||- - AlexandrY   Лучше, лучше ... В STR91x есть специальное мес...   Jul 21 2007, 08:22
|- - zltigo   Цитата(Andy_ry @ Jul 11 2007, 12:00) В ST...   Jul 11 2007, 15:09
|- - SanyaKID   Цитата(zltigo @ Jul 11 2007, 19:09) Если-...   Jul 16 2007, 10:32
|- - SergeyDDD   Далай обработчик FIQ на ассемблере   Jul 16 2007, 11:51
||- - SanyaKID   Цитата(SergeyDDD @ Jul 16 2007, 15:51) Да...   Jul 17 2007, 06:40
||- - SergeyDDD   Цитата(SanyaKID @ Jul 17 2007, 10:40) Я д...   Jul 17 2007, 14:33
||- - defunct   Цитата(SergeyDDD @ Jul 17 2007, 17:33) Да...   Jul 20 2007, 13:48
|- - kamedi_clab   Цитата(SanyaKID @ Jul 16 2007, 14:32) у м...   Jul 19 2007, 12:41
- - sergeeff   Что-то никак не пойму. Контроллер прерываний испо...   Jul 20 2007, 21:21
|- - Сергей Борщ   Цитата(sergeeff @ Jul 21 2007, 00:21) а о...   Jul 21 2007, 07:54
|- - sergeeff   Цитата(Сергей Борщ @ Jul 21 2007, 11:54) ...   Jul 21 2007, 11:05
|- - AlexandrY   Вы правы, человек поднял проблему не подумавши. Ц...   Jul 22 2007, 13:54
||- - zltigo   Цитата(AlexandrY @ Jul 22 2007, 16:54) че...   Jul 22 2007, 14:00
||- - sergeeff   Пример классный (без иронии, я на досуге тоже поду...   Jul 22 2007, 19:18
||- - zltigo   Цитата(sergeeff @ Jul 22 2007, 22:18) Но ...   Jul 22 2007, 19:29
||- - AlexandrY   Этот пример содержит подвох. Достаточно юзеру снов...   Jul 22 2007, 19:53
||- - zltigo   Цитата(AlexandrY @ Jul 22 2007, 22:53) Эт...   Jul 22 2007, 20:23
||- - AlexandrY   Юзер на C не успеет вновь разрешить прерывания до ...   Jul 22 2007, 20:35
||- - zltigo   Цитата(AlexandrY @ Jul 22 2007, 23:35) Юз...   Jul 22 2007, 21:34
||- - AlexandrY   Ok! Согласен. В принципе цели мы добились. Чел...   Jul 22 2007, 21:49
||- - zltigo   Цитата(AlexandrY @ Jul 23 2007, 00:49) Че...   Jul 22 2007, 22:06
|- - Сергей Борщ   Цитата(sergeeff @ Jul 21 2007, 14:05) Не ...   Jul 23 2007, 09:44
- - sergeeff   Насчет умной функции обработчика прерывания. Думае...   Jul 24 2007, 06:01
|- - zltigo   Цитата(sergeeff @ Jul 24 2007, 09:01) Но....   Jul 24 2007, 06:25
|- - Сергей Борщ   Цитата(sergeeff @ Jul 24 2007, 09:01) Пре...   Jul 24 2007, 10:48
- - GetSmart   Цитата(SanyaKID)В итоге, в теории, чтобы не ковыря...   Jul 24 2007, 15:02
- - SanyaKID   Цитата(GetSmart @ Jul 24 2007, 19:02) Ну ...   Jul 25 2007, 09:43
- - Сергей Борщ   Цитата(SanyaKID @ Jul 25 2007, 12:43) Да,...   Jul 25 2007, 10:21


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

 


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


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