Description
Source
Call Graph
Start Line: 168
int main(void)
{
unsigned int i;
unsigned char error;
unsigned int pBuffer[AT91C_IFLASH_PAGE_SIZE / 4];
unsigned int lastPageAddress;
volatile unsigned int *pLastPageData;
unsigned char pageLocked;
TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);
printf("-- Basic Internal Flash Project %s --\n\r", SOFTPACK_VERSION);
printf("-- %s\n\r", BOARD_NAME);
printf("-- Compiled: %s %s --\n\r", __DATE__, __TIME__);
// Initialize flash driver
FLASHD_Initialize(BOARD_MCK);
// Unlock whole flash
printf("-I- Unlocking the whole flash\n\r");
#if defined(at91sam7a3)
error = FLASHD_Unlock(AT91C_IFLASH, AT91C_IFLASH + 64 * 1024, 0, 0);
#else
error = FLASHD_Unlock(AT91C_IFLASH, AT91C_IFLASH + AT91C_IFLASH_SIZE, 0, 0);
#endif
ASSERT(!error, "-F- Error while trying to unlock the whole flash (0x%02X)\n\r", error);
// Performs tests on last page (to avoid overriding existing program).
lastPageAddress = AT91C_IFLASH + AT91C_IFLASH_SIZE - AT91C_IFLASH_PAGE_SIZE;
pLastPageData = (volatile unsigned int *) lastPageAddress;
// Write page with walking bit pattern (0x00000001, 0x00000002, ...)
printf("-I- Writing last page with walking bit pattern\n\r");
for (i=0; i < (AT91C_IFLASH_PAGE_SIZE / 4); i++) {
pBuffer[i] = 1 << (i % 32);
}
error = FLASHD_Write(lastPageAddress, pBuffer, AT91C_IFLASH_PAGE_SIZE);
ASSERT(!error, "-F- Error when trying to write page (0x%02X)\n\r", error);
// Check page contents
printf("-I- Checking page contents ");
for (i=0; i < (AT91C_IFLASH_PAGE_SIZE / 4); i++) {
printf(".");
ASSERT(pLastPageData[i] == (1 << (i % 32)),
"\n\r-F- Expected 0x%08X at address 0x%08X, found 0x%08X\n\r",
(1 << (i % 32)), (unsigned int) &(pLastPageData[i]), pLastPageData[i]);
}
printf(" ok \n\r");
#if defined(at91sam7a3)
// Only the first 64Kb can be locked in the SAM7A3
lastPageAddress = AT91C_IFLASH + (64*1024) - AT91C_IFLASH_PAGE_SIZE;
#endif
// Lock page
printf("-I- Locking last page\n\r");
error = FLASHD_Lock(lastPageAddress, lastPageAddress + AT91C_IFLASH_PAGE_SIZE, 0, 0);
ASSERT(!error, "-F- Error when trying to lock page (0x%02X)\n\r", error);
// Check that associated region is locked
printf("-I- Checking lock status ... ");
pageLocked = FLASHD_IsLocked(lastPageAddress, lastPageAddress + AT91C_IFLASH_PAGE_SIZE);
ASSERT(pageLocked, "\n\r-F- Page is not locked\n\r");
printf("ok\n\r");
// Unlock page
printf("-I- Unlocking last page\n\r");
error = FLASHD_Unlock(lastPageAddress, lastPageAddress + AT91C_IFLASH_PAGE_SIZE, 0, 0);
ASSERT(!error, "-F- Error when trying to unlock page (0x%02X)\n\r", error);
// Check that associated region is unlocked
printf("-I- Checking lock status ... ");
pageLocked = FLASHD_IsLocked(lastPageAddress, lastPageAddress + AT91C_IFLASH_PAGE_SIZE);
ASSERT(!pageLocked, "\n\r-F- Page is locked\n\r");
printf("ok\n\r");
#if (EFC_NUM_GPNVMS > 0)
// Test GPNVM bit #1 (should be safe)
if (FLASHD_IsGPNVMSet(1)) {
printf("-I- GPNVM #1 is set\n\r");
// Clear GPNVM
printf("-I- Clearing GPNVM #%d\n\r", 1);
error = FLASHD_ClearGPNVM(1);
ASSERT(!error, "-F- Error while trying to clear GPNVM (0x%02X)\n\r", error);
ASSERT(!FLASHD_IsGPNVMSet(1), "-F- GPNVM is set\n\r");
// Set GPNVM
printf("-I- Setting GPNVM #%d\n\r", 1);
error = FLASHD_SetGPNVM(1);
ASSERT(!error, "-F- Error while trying to set GPNVM (0x%02X)\n\r", error);
ASSERT(FLASHD_IsGPNVMSet(1), "-F- GPNVM is not set\n\r");
}
else {
printf("-I- GPNVM #1 is cleared\n\r");
// Set GPNVM
printf("-I- Setting GPNVM #%d\n\r", 1);
error = FLASHD_SetGPNVM(1);
ASSERT(!error, "-F- Error while trying to set GPNVM (0x%02X)\n\r", error);
ASSERT(FLASHD_IsGPNVMSet(1), "-F- GPNVM is not set\n\r");
// Clear GPNVM
printf("-I- Clearing GPNVM #%d\n\r", 1);
error = FLASHD_ClearGPNVM(1);
ASSERT(!error, "-F- Error while trying to clear GPNVM (0x%02X)\n\r", error);
ASSERT(!FLASHD_IsGPNVMSet(1), "-F- GPNVM is set\n\r");
}
#endif
printf("-I- All tests ok\n\r");
return 0;
}