请教个问题:
在设计bootloader 之前,我在 改9S12G128 app 代码:
按照AN4258 如下步骤改动:
ROM_4000 = READ_ONLY 0x4000 TO 0x7F7F; (文档是7F0F,对应的参考代码是7F7F)
ROM_C000 = READ_ONLY 0xC000 TO 0xEFDF;
/* paged FLASH: 0x8000 TO 0xBFFF; addressed through PPAGE */
PAGE_08 = READ_ONLY 0x088000 TO 0x08BFFF;
PAGE_09 = READ_ONLY 0x098000 TO 0x09BFFF;
PAGE_0A = READ_ONLY 0x0A8000 TO 0x0ABFFF;
PAGE_0B = READ_ONLY 0x0B8000 TO 0x0BBFFF;
PAGE_0C = READ_ONLY 0x0C8000 TO 0x0C93FF;
PAGE_0C_A000 = READ_ONLY 0x0CA000 TO 0x0CBFFF;
PAGE_0E = READ_ONLY 0x0E8000 TO 0x0EBFFF;
/* PAGE_0D = READ_ONLY 0x0D8000 TO 0x0DBFFF; not used: equivalent to ROM_4000 */
/* PAGE_0F = READ_ONLY 0x0F8000 TO 0x0FBEFF; not used: equivalent to ROM_C000 */
END
PLACEMENT /* here all predefined and user segments are placed into the SEGMENTS defined above. */
_PRESTART, /* Used in HIWARE format: jump to _Startup at the code start */
STARTUP, /* startup data structures */
ROM_VAR, /* constant variables */
STRINGS, /* string literals */
VIRTUAL_TABLE_SEGMENT, /* C++ virtual table segment */
//.ostext, /* OSEK */
NON_BANKED, /* runtime routines which must not be banked */
COPY /* copy down information: how to initialize variables */
/* in case you want to use ROM_4000 here as well, make sure
that all files (incl. library files) are compiled with the
option: -OnB=b */
INTO ROM_C000/*, ROM_1400, ROM_4000*/;
DEFAULT_ROM INTO PAGE_08, PAGE_09, PAGE_0A, PAGE_0B, PAGE_0C, PAGE_0C_A000, PAGE_0E
void main(void)
{
IVBR = 0x7F;
//set the vector base
改动后 程序无法正常运行,进去不了Main 函数;请问 还有哪里需要设置吗?
hi,
I meet the same question with you.How do you deal with it?
I set the IVBR register( IVBR = 0x7F ),but the interrupt vector still at the 0xff80-0xffff. Where should I set the IVBR register,and what others should I do?
Regards,
Joy
Before design the bootloader ,I am changing 9S12G128 app code:
According AN4258 from NXP website:
ROM_4000 = READ_ONLY 0x4000 TO 0x7F7F; (the document is 7F0F,but the code is 7F7F)
ROM_C000 = READ_ONLY 0xC000 TO 0xEFDF;
/* paged FLASH: 0x8000 TO 0xBFFF; addressed through PPAGE */
PAGE_08 = READ_ONLY 0x088000 TO 0x08BFFF;
PAGE_09 = READ_ONLY 0x098000 TO 0x09BFFF;
PAGE_0A = READ_ONLY 0x0A8000 TO 0x0ABFFF;
PAGE_0B = READ_ONLY 0x0B8000 TO 0x0BBFFF;
PAGE_0C = READ_ONLY 0x0C8000 TO 0x0C93FF;
PAGE_0C_A000 = READ_ONLY 0x0CA000 TO 0x0CBFFF;
PAGE_0E = READ_ONLY 0x0E8000 TO 0x0EBFFF;
/* PAGE_0D = READ_ONLY 0x0D8000 TO 0x0DBFFF; not used: equivalent to ROM_4000 */
/* PAGE_0F = READ_ONLY 0x0F8000 TO 0x0FBEFF; not used: equivalent to ROM_C000 */
END
PLACEMENT /* here all predefined and user segments are placed into the SEGMENTS defined above. */
_PRESTART, /* Used in HIWARE format: jump to _Startup at the code start */
STARTUP, /* startup data structures */
ROM_VAR, /* constant variables */
STRINGS, /* string literals */
VIRTUAL_TABLE_SEGMENT, /* C++ virtual table segment */
//.ostext, /* OSEK */
NON_BANKED, /* runtime routines which must not be banked */
COPY /* copy down information: how to initialize variables */
/* in case you want to use ROM_4000 here as well, make sure
that all files (incl. library files) are compiled with the
option: -OnB=b */
INTO ROM_C000/*, ROM_1400, ROM_4000*/;
DEFAULT_ROM INTO PAGE_08, PAGE_09, PAGE_0A, PAGE_0B, PAGE_0C, PAGE_0C_A000, PAGE_0E
void main(void)
{
IVBR = 0x7F;
//set the vector base
but after changing the code,the code can not work, Can not enter into the main (); Is there where I need to set up?
Hi,
What did you change exactly?
The 0x7F7F is the max limit for ROM_4000 in the application project. Interrupt vector table is located at 0x7F80 - 0x7FFF.
So it doesn't matter if the limit is 0x7F7F or 0x7F0F, this should not have impact.
Have you done other modifications?
Regards,
iggi