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

 
 
> Как глобально запретить прерывания
SpiritDance
сообщение Aug 21 2006, 09:17
Сообщение #1


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Столкнулся со следующей неувязкой. На время записи во флеш мне очень желательно запретить выполнение прерываний. Я даже догадался что для запрета прерываний нужно "всего лишь" установить биты I и F в регистре CPSR. Написал следующий код.
Код
INT_DISABLE_MASK   EQU      0x000000C0

    EXPORT disable_interrupts
    EXPORT enable_interrupts

    ARM
    AREA    FASTCODE, CODE
enable_interrupts
;Çàïèñàòü 0 â áèòû I è F ðåãèñòðà CPSR, ÷òîáû çàïðåòèòü ïðåðûâàíèÿ
    mrs     r0, cpsr
    mvn     r1, #INT_DISABLE_MASK
    and     r0, r0, r1
    msr     cpsr_c, r0
    bx      lr

disable_interrupts
;Çàïèñàòü 1 â áèòû I è F ðåãèñòðà CPSR, ÷òîáû çàïðåòèòü ïðåðûâàíèÿ
    mrs     r0, cpsr
    orr     r0, r0, #INT_DISABLE_MASK
    msr     cpsr_c, r0
    bx      lr
    END

Но с помощью отладчика обнаружил, что он не работает, то есть значение регистра cpsr не меняется. Вызаваются эти функции в свою очередь из функции находящейся в рам и помеченной с помощью #pragma arm, то есть некорректный переход из АРМ в thumb не является причиной. Начал копать в чем же дело и наткнулся на вот такое
Цитата
In user mode, only the condition flags of the CPSR (CPSR_f) can be changed. In other modes, the entire CPSR can be changed.

То есть собственно правильно что код не работает.

Отсюда вопрос как же корректно запретить - установить разрешение прерываний IRQ и FIQ? Только как-то через AIC?

Сообщение отредактировал SpiritDance - Aug 21 2006, 09:18


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SpiritDance
сообщение Aug 21 2006, 11:46
Сообщение #2


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Все. Процессор в систем с самого начала. Вопрос только а насколько корректно оставлять его там? Я так понимаю что для однозадачных прошивок это даже более правильно чем user mode?

klen
Насколько я понимаю вышеприведенную цитату из user mode в system mode с помощью команды перейти невозможно. Поправьте если я ошибаюсь.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
klen
сообщение Aug 21 2006, 12:08
Сообщение #3


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(SpiritDance @ Aug 21 2006, 15:46) *
Насколько я понимаю вышеприведенную цитату из user mode в system mode с помощью команды перейти невозможно. Поправьте если я ошибаюсь.

Я тоже до сих пор понимаю. Поэтому можно выполнить команду swi #N - тоесть вызвать "системную функцию" c номером N путем програмного прерывания, обработчик програмного прерывания работает врежиме супервизора, поэтому имеет доступ к CSPR.
Но это как то долго. у меня пока все всегда работает в режиме system.
Если я не прав то попрвте меня.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SpiritDance   Как глобально запретить прерывания   Aug 21 2006, 09:17
- - aaarrr   А зачем было процессор в USER mode загонять?   Aug 21 2006, 09:35
- - SpiritDance   Непонял... что значит загонять в user mode? Поподр...   Aug 21 2006, 10:57
- - klen   Попробуте обернуть Ваш код в команды перехода в Sy...   Aug 21 2006, 11:10
|- - gmax   Цитата(SpiritDance @ Aug 21 2006, 14:46) ...   Aug 21 2006, 12:05
- - aaarrr   Цитата(SpiritDance @ Aug 21 2006, 15:46) ...   Aug 21 2006, 12:05
|- - SpiritDance   Цитата(aaarrr @ Aug 21 2006, 16:05) Тольк...   Aug 21 2006, 12:17
|- - klen   Цитата(SpiritDance @ Aug 21 2006, 16:17) ...   Aug 21 2006, 13:14
- - aaarrr   Цитата(SpiritDance @ Aug 21 2006, 16:17) ...   Aug 21 2006, 12:45
|- - SpiritDance   Цитата(aaarrr @ Aug 21 2006, 16:45) А смы...   Aug 21 2006, 12:49
- - aaarrr   Цитата(SpiritDance @ Aug 21 2006, 16:49) ...   Aug 21 2006, 13:00
- - SpiritDance   А почему обработчик в thumb-режиме?   Aug 21 2006, 13:42
|- - klen   Цитата(SpiritDance @ Aug 21 2006, 17:42) ...   Aug 21 2006, 13:54
- - SpiritDance   Ясно. Всем большое спасибо!   Aug 22 2006, 07:00


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

 


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


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