При прогоне на плате возникли такие проблемы:
Если функцию записи проходить по шагам то все прекрасно, обычном запуске вешается на ожидании
Код
while(!((temp=f_pMC->MC_FSR) & AT91C_MC_FRDY));
бит не устанавливается, при остановке вываливаюсь на строку
Код
PAbt_Handler B PAbt_Handler
в SAM.s
В регистре отложенный прерываний висит 01 - fiq хотя я их не использую и перед вызовом функции записи все прерывания запрещены. Хз если бы проблемы были в отсутсвии обработчика то выкидывало бы на
Код
FIQ_Handler B FIQ_Handler
Код
#include "board.h"
AT91PS_MC f_pMC = AT91C_BASE_MC;
int flash_write_page(int addr, char *data, int size_data)
{
int i = 0, page, temp;
int *Flash, *data_temp;
Flash = (int*)addr;
data_temp= (int*) data;
page = (int)((addr - (int)AT91C_IFLASH)>> 8);
for (i=0;(i<size_data)&&(i<255); Flash++,data_temp++,i += 4)
{
*Flash =*data_temp;
}
f_pMC->MC_FCR = (0x5a << 24) | (page << 8) | AT91C_MC_FCMD_START_PROG;
while(!((temp=f_pMC->MC_FSR) & AT91C_MC_FRDY));
if((temp & AT91C_MC_LOCKE) || (temp & AT91C_MC_PROGE))
{
return -1;
}
return 0;
}
Сообщение отредактировал Spoofing - Jun 24 2009, 15:21