总共修改6个地方 1.prm文件,将 - ROM_4000 = READ_ONLY DATA_NEAR IBCC_NEAR 0x4000 TO 0x7FFF修改为
RAM_4000 =READ_WRITE DATA_NEAR 0x4000TO 0x7FFF 2) DEFAULT_RAM INTO RAM修改为 DEFAULT_RAM INTO RAM,RAM_4000
2.standard settings——Assembler for HC12——Options——Code Generations——Memory Model,修改为Banked MemoryModel, 3.standard settings——Assembler for HC12——Options——Code Generations——Define mapping for memory space0x4000~0x7FFF,修改为Map RAM, 4.standard settings——Compiler for HC12——Options——Code Generations——Memory Model,修改为Banked MemoryModel, 5.standard settings——Compiler for HC12——Options——Code Generations——Define mapping for memory space0x4000~0x7FFF,修改为Map RAM, 6.standard settings——Compiler for HC12——Options——Language——Preprocessor definitions——,修改为__MAP_RAM__ 7.上述的设置工作,都是准备工作,没有下述语句,上述的设置工作,都是白费, ====================================语句开始=========================================== #if(defined(__MAP_RAM__) || defined(__MAP_FLASH__) || defined(__MAP_EXTERNAL__))&& !defined(__DO_SET_MMCTL1__) #define__DO_SET_MMCTL1__ #endif
#ifdefined(__DO_SET_MMCTL1__) /* Set the MMCTL1 byte. Please use forHCS12XE and change the bits according */ /* to your configuration. */ /* Note: MMCTL1 is write once thereforeplease adapt this initialization here. */ /* This has to be done prior to the call toInit. */ #define _MMCTL1_ADR(0x00000013) #define_MMCTL1_BIT_TGMRAMON (1<<7) /* EEETag RAM and FTM SCRATCH RAM visible in the memory map */ #define_MMCTL1_BIT_EEEIFRON (1<<5) /* EEEIFR visible in the memory map */ #define_MMCTL1_BIT_PGMIFRON (1<<4) /*Program IFR visible in the memory map */ #define_MMCTL1_BIT_RAMHM (1<<3) /* RAM only in the higher half of the memorymap */ #define_MMCTL1_BIT_EROMON (1<<2) /* Enables emulated Flash or ROM memory inthe memory map */ #define_MMCTL1_BIT_ROMHM (1<<1) /* FLASH or ROM only in higher Half of MemoryMap */ #define_MMCTL1_BIT_ROMON (1<<0) /* Enable FLASH or ROM in the memory map */
#define_MMCTL1_SET(value) ((*(volatileunsigned char*)_MMCTL1_ADR)= (value))
#ifdefined(__MAP_FLASH__) _MMCTL1_SET(_MMCTL1_BIT_ROMON |_MMCTL1_BIT_EROMON); #elifdefined(__MAP_EXTERNAL__) _MMCTL1_SET(_MMCTL1_BIT_ROMON |_MMCTL1_BIT_EROMON | _MMCTL1_BIT_ROMHM); #else /* RAM */ _MMCTL1_SET(_MMCTL1_BIT_ROMON |_MMCTL1_BIT_EROMON | _MMCTL1_BIT_RAMHM | _MMCTL1_BIT_ROMHM); #endif #endif ====================================语句结束=========================================== 上面的语句,一般都是在新建工程的时候,编译器自动在start12.c文件里生成的,不用手动修改。 主要是通过读取是否预定义了__MAP_RAM__或(__MAP_FLASH__或__MAP_EXTERNAL__ 并根据预定义项对MMCTL1寄存器进行操作,寄存器按预定义设置好后,0x4000~0x7FFF地址即可按设置进行分配。
|