如题,在CP15 控制寄存器 c0中
31bit Asynchronous clock
30bit notFastBus select
c0的高两位是什么意思,貌似在datasheet中没有找到说明啊???
现在在调试MMU中遇到很奇怪的问题
在开启MMU后,我专门弄了一个对寄存器的赋值操作,来验证是否OK(映射都是按照1-1来的)
但是有的寄存器赋值操作就引起调试器异常退出;
比如
MMU_Init();
#if ADS10
__rt_lib_init(); //for ADS 1.0
#endif
Port_Init();
// below for test
rGPFDAT = 0xffff;
;
rGPFDAT = 0x0000;
;
rGPECON = rGPECON;
rMISCCR = rMISCCR;
rGSTATUS4 = rGSTATUS4;
rADCCON = rADCCON; //执行该句时,MDK就报错“could not stop ARM device,please check the JTAG cable”点击确认后,MDK就跳出调试界面
太诡异了
高手来帮帮忙啊,弄懂了,高分感激。。
MMU也是嵌入式学习的一道坎啊,这个通了,才能顺行往下做。。。
再补充几个信息
这个是运行异常的寄存器地址
#define rADCCON (*(volatile unsigned *)0x58000000) //ADC control
正常的比如是
#define rCLKDIVN (*(volatile unsigned *)0x4c000014) //Clock divider control
我开发板上的SDRAM一共64MB,挂于系统内存空间的0x30000000处
MMU_SetMTT(0x00000000,0x07f00000,0x00000000,RW_CNB); //bank0 //128MB
MMU_SetMTT(0x08000000,0x0ff00000,0x08000000,RW_CNB); //bank1
MMU_SetMTT(0x10000000,0x17f00000,0x10000000,RW_NCNB); //bank2
MMU_SetMTT(0x18000000,0x1ff00000,0x18000000,RW_NCNB); //bank3
MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_NCNB); //bank4
MMU_SetMTT(0x28000000,0x2ff00000,0x28000000,RW_NCNB); //bank5
MMU_SetMTT(0x30000000,0x33ffffff,0x30000000,RW_NCNB);
MMU_SetMTT(0x38000000,0x3ff00000,0x38000000,RW_NCNB); //bank7 //128MB,
MMU_SetMTT(0x40000000,0x47f00000,0x40000000,RW_NCNB); //SFR //128MB,物理寄存器,noncached nonbuffered
MMU_SetMTT(0x48000000,0x5af00000,0x48000000,RW_NCNB); //SFR //48MB,
MMU_SetMTT(0x5b000000,0xfff00000,0x5b000000,RW_FAULT);//not used //如果应用层访问到该区域MMU会报错
MMU_SetTTBase(_MMUTT_STARTADDRESS);
。。。。。。
我在调试状态下 看MMU_BASE处的内存,发现不对劲,我还特意改了一处内存,但是执行完SetMMU之后,该处内存还是我改的值,没有任何变化。