|
at91sam7x256 + Keil. Спецы - ВЫРУЧАЙТЕ, Запись во внутреннюю FLASH -> проблемы |
|
|
|
Jan 5 2008, 09:16
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 29-09-06
Из: Зеленорад
Пользователь №: 20 810

|
Всем доброго времени суток!
Проблема в следующем:
Сделал проектик под Кейлом v3.50, в котором происходит заполнение массива из 256 байт (от 0x00 до 0xFF), а затем запись его в страницу внутренней флэш камня. Брал пример с этого форума, сделанный в IAR, переделал его под кейл...наступил на грабли...
после записи страницы
for (i = 0; i < EFC_PAGE_SIZE_UINT; i++) *(pflash + i ) = *(pbuf + i);
идут две волшебные строчки:
Строчка1 AT91C_BASE_MC->MC_FCR = (0x5A << 24) | (page << 8 ) |AT91C_MC_FCMD_START_PROG;
Строчка 2 while (!(AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY));
Так вот, если в отладке ставлю брекпоинт на строчке 2, то страница пишется, а после запуска Run программа нормально выполняется. Если же убираю этот брекпоинт, то выполнение строчки 2 не происходит, и программа вываливается в DAbt_Handler. Без эмулятора, похоже, программа также зависает в этом же месте. Эмулятор от Segger, устройство - пока на 7X-EK
Кто нить ловил такой глюк?
Заране благодарен
|
|
|
|
|
 |
Ответов
|
Jan 10 2008, 13:50
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 29-09-06
Из: Зеленорад
Пользователь №: 20 810

|
KRS, последовал Вашему примеру
Вот кусок файла sam7.s
; Enter User Mode and set its Stack Pointer ;MSR CPSR_c, #Mode_USR MSR CPSR_c, #Mode_SVC MOV SP, R0 ;SUB SL, SP, #USR_Stack_Size SUB SL, SP, #SVC_Stack_Size
В общем, я подменил user mode на supervisor. Биты I и F стали управляемыим. Вопрос. В принципе, в этом режиме можно и остаться?
Сообщение отредактировал Niger - Jan 10 2008, 13:51
|
|
|
|
|
Feb 7 2008, 22:46
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Niger @ Jan 10 2008, 15:50)  В общем, я подменил user mode на supervisor. Биты I и F стали управляемыим. Вопрос. В принципе, в этом режиме можно и остаться? Можно замаскировать все прерывания через AIC: Код unsigned long iMask = pAIC->AIC_IMR; pAIC->AIC_IDCR = 0xFFFFFFFF;
..... тут прерывания запрещены
pAIC->AIC_IECR = iMask; .. тут восстановлены. Работает не зависимо от режима.
|
|
|
|
Сообщений в этой теме
Niger at91sam7x256 + Keil. Спецы - ВЫРУЧАЙТЕ Jan 5 2008, 09:16 Dimentius прерывания на момент активации записи во флеш запр... Jan 5 2008, 09:57 Niger Цитата(Dimentius @ Jan 5 2008, 12:57) пре... Jan 5 2008, 11:23 Dimentius в регистре MC_FMR поле FMCN правильно задано?
Whe... Jan 5 2008, 11:45 Kirill Frolov Цитата(Dimentius @ Jan 5 2008, 14:45) в р... Feb 8 2008, 00:31 Niger Тут внимательно посмотрел в дизассемблере , оказыв... Jan 5 2008, 12:52 Niger Разобрался я, как писать/читать флэш.
Но теперь в... Jan 10 2008, 08:53 KRS Цитата(Niger @ Jan 10 2008, 11:53) Разобр... Jan 10 2008, 09:23 KRS Цитата(Niger @ Jan 10 2008, 16:50) В обще... Jan 10 2008, 15:02  aaarrr Цитата(KRS @ Jan 10 2008, 18:02) Ну вообщ... Jan 10 2008, 15:32   KRS Цитата(aaarrr @ Jan 10 2008, 18:32) Почем... Jan 10 2008, 16:17 Niger Все, работает!!!
Всем спасибо.
Если ... Jan 23 2008, 14:12 _dem свои пять копеек
При неправильной установке FMC... Feb 8 2008, 15:04
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|