Коллеги, может, кто сталкивался,
перевожу проект из CVAVR в Atmel Studio 7.
Код проверенный и 100% рабочий.
В Studio заработало, но с нюансами:
код, нормально выполняющийся в CVAVR:
(читаем уникальный код Атмеги, SP-драйвер родной Атмелевский)
Код
uint8_t i;
uint8_t addr[11] ={0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x10,0x12,0x13,0x14,0x15};
for (i=0; i<11; i++){
SP_WaitForSPM();
int2hexstr(SP_ReadCalibrationByte(addr[i]),guid,i*2);
}
код, работающий в Studio
Код
uint8_t i;
uint8_t addr[11] ={0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x10,0x12,0x13,0x14,0x15};
[b]_delay_ms(2);[/b]
for (i=0; i<11; i++){
SP_WaitForSPM();
int2hexstr(SP_ReadCalibrationByte(addr[i]),guid,i*2);
[b]_delay_ms(2);[/b]
}
Без делея выдаёт фуфло. На что ему делей?
И ещё непонятный момент.
Работа начинается с bootloader'а, в некоторый момент происходит jump 0x00. Иногда в application section пусто (так задумано), и контроллер "по нолям" снова приходит в бутлоадер.
Код
void jump_to_0(){
CCP = CCP_IOREG_gc;
PMIC.CTRL = 0;
asm volatile("jmp 0x00");
}
После CVAVR всё происходит без проблем, а после Студии – начинает глючить USART, например.
Правильно ли я понимаю, что в Студии нужно делать что-то вроде pmic_set_vector_location(PMIC_VEC_APPLICATION) перед jump 0x00 и, соответственно, принудительный перевод векторов на бутлодер в начале бутлодера?
Сообщение отредактировал ffs2001 - May 26 2016, 08:30