Привет всем. Пишу бутлоадер для msp430f6721 в IAR.
Память разбил на 3 части:
- бутлоадер (E000-FFFF) - в памяти пока записан только он;
- рабочая программа (B000-DFFF);
- файл прошивки (8000-AFFF);
Пытаюсь записать бутлоадером тестовую страницу памяти (512 байт) по адресу 0x8000 - пишет правильно, но после повторного запуска отладки страница оказывается забита какими-то левыми данными.
Когда пытаюсь писать по адресу 0xC000 - все ок.
Помогите пожалуйста разобраться. грешу на настройки линкера. на всякий случай вот ф-ция записи флеш:
CODE
uint8_t flash_write(int addr, uint8_t *data)
{
flash_erase(addr);
char *addr_ptr;
char *data_ptr;
addr_ptr = (char*)(addr);
data_ptr = (char*)(data);
__disable_interrupt();
FCTL3 = FWKEY; // Clear Lock bit
FCTL1 = FWKEY + WRT; // Set WRT bit for write operation
for (uint16_t i = 0; i < MCU_PAGE_SIZE; i++)
{
*addr_ptr++ = *data_ptr++;
}
FCTL1 = FWKEY; // Clear WRT bit
FCTL3 = FWKEY + LOCK; // Set LOCK bit
while(BUSY & FCTL3);
__enable_interrupt();
addr_ptr = (char*)(addr);
data_ptr = (char*)(data);
for (uint16_t i = 0; i < MCU_PAGE_SIZE; i++)
{
if ((*data_ptr++) != (*addr_ptr++))
{
return MCU_FLASH_WRITE_ER;
}
}
return MCU_FLASH_WRITE_OK;
}
вот файл линкера для бутлоадера:
// -------------------------------------
// Code
//
-Z(CODE)CSTART,ISR_CODE,CODE_ID=E000-FF7F
-P(CODE)CODE,CODE16=E000-FF7F
// -------------------------------------
// Interrupt vectors
//
-Z(CODE)INTVEC=FF80-FFFF
-Z(CODE)RESET=FFFE-FFFF
Эскизы прикрепленных изображений