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

 
 
> SAM7S64 - запись flash и прерывания, как писать flash, не запрещая прерывания?
Shum1
сообщение Nov 7 2007, 07:37
Сообщение #1





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



Вроде прочитал всё, что касается записи во флэш (по форумам и в доках). Все приведённые примеры с запретом прерываний. Мне же надо записывать порядка 10 страниц и при этом обрабатывать прерывания таймера 0,25 мс. С запретом прерываний запись работает, убираю запрет - вываливается в Prefetch Abort. В документации фраз о необходимости запрета прерываний не нашёл - либо ткните носом, почему низя прерывания пользовать (тада внешнюю память навешивать буду), либо подскажите, чего мона придумать........ Может обработчик таймера в RAM?.... или нельзя так?....... первый проект на арме - не знаю чего и придумать...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Shum1
сообщение Nov 13 2007, 09:09
Сообщение #2





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



Устойчивой работы добился следующим образом:
в *.xcl запретил пользовать кусок RAM размером равным коду Cstartup.s79 (у меня 0x100 байт).
И потом в main() вставил ремап и копирование всего кода Cstartup.s79 в RAM. То есть все обработчики исключений положил в RAM. Иначе все вызовы обработчиков приводят к ошибкам (там переход смещением адреса прописан, а надо бы на абсолютный адрес во флэш прыгать) По-моему такой способ кривой. При изменениях Cstartup.s79 придётся менять xcl и размер копируемой области. Но переделывать Cstartup.s79 сейчас не буду - так как он взят готовый, а в ассемблере разбираться пока нет времени.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 13 2007, 12:54
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Shum1 @ Nov 13 2007, 11:09) *
(там переход смещением адреса прописан, а надо бы на абсолютный адрес во флэш прыгать)
....
Но переделывать Cstartup.s79 сейчас не буду - так как он взят готовый, а в ассемблере разбираться пока нет времени.
Я вообще не подключаю Cstartup, линкуется библиотечный, вектора прописываю вручную в отдельтном файле:
Код
extern SW_Switcher
        CODE32
        COMMON  INTVEC:CODE:ROOT
        org     0x00000004
UNDEF_Trap
        B       UNDEF_Trap

        org     0x00000008
        LDR     PC, SWI_Switcher_Adr  ; Branch to swi_handler

        org     0x0000000C
Prefetch_Trap
        B       Prefetch_Trap

        org     0x00000010
Data_Trap
        B       Data_Trap

        org     0x00000018
        LDR     PC, AT91C_AIC_IVR                ; void (*AT91C_AIC_IVR)()

        org     0x0000001C
FIQ_Trap
        B       FIQ_Trap
        org     0x00000028
SWI_Switcher_Adr:
        DC32    SWI_Switcher
В .xcl резервирую место только под вектора (0x40 байт):
Код
-DRAMSTART=00200040
-DRAMEND=00203FFF
и только область векторов и копирую.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Waso
сообщение Nov 24 2007, 13:45
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 268
Регистрация: 4-11-05
Пользователь №: 10 470



Цитата(Сергей Борщ @ Nov 13 2007, 19:54) *
Я вообще не подключаю Cstartup, линкуется библиотечный..
А можно поподробнее о библиотечном аналоге Cstartup? Как его слинковать, откуда взять, какие функции он выполняет? Ато первый раз про такой слышу. unsure.gif

И еще. Резервировать 0x40 байт под вектора не много ли? Всего там 8 4-х байтных векторов, правильно? Это 0х20. В два раза больше места это на случай что все они будут грузить в PC абсолютный адрес? Или там есть чтото еще?

Извиняюсь что так много вопросов.... laughing.gif smile3046.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 24 2007, 14:00
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Waso @ Nov 24 2007, 15:45) *
А можно поподробнее о библиотечном аналоге Cstartup? Как его слинковать, откуда взять, какие функции он выполняет? Ато первый раз про такой слышу.
Просто не полключать CStartup явно, и он подлинкуется из библиотеки сам. Функции выполняет те же, что и ваш, идущий с примерами.
Цитата(Waso @ Nov 24 2007, 15:45) *
В два раза больше места это на случай что все они будут грузить в PC абсолютный адрес?
Да, именно так. К тому же у LPC ремапятся как раз 0x40 байт на область векторов.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 9th August 2025 - 05:51
Рейтинг@Mail.ru


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