|
疑惑了好几天。看了天嵌的启动代码,在main里面有如下部分
Beep(2000, 100);
Uart_SendByte('\n');
Uart_Printf("<***************************************>\n");
Uart_Printf(" TQ2440 Test Program\n");
Uart_Printf(" www.embedsky.net\n");
// Uart_Printf(" Build time is: %s %s\n", __DATE__ , __TIME__ );
Uart_Printf("<***************************************>\n");
rMISCCR=rMISCCR&~(1<<3); // USBD is selected instead of USBH1
rMISCCR=rMISCCR&~(1<<13); // USB port 1 is enabled.
rDSC0 = 0x2aa;
rDSC1 = 0x2aaaaaaa;
//Enable NAND, USBD, PWM TImer, UART0,1 and GPIO clock,
//the others must be enabled in OS!!!
rCLKCON = 0xfffff0;
MMU_Init(); //
可以看到,第一句是使蜂鸣器响一下,然后最后一句是初始化MMU。
然后看了下ucOS-II里面的启动,在系统启动后创建了一个任务,是每秒响一下蜂鸣器。
但是看了下这个任务的源码,发现和启动代码里响一下蜂鸣器的代码是一样的。(我的意思是这两个地方驱动蜂鸣器的时候都是同一个地址,就是GPB)。
我不明白的是启动MMU之后和没有启动MMU之前,这个地址不会改变么?
MMU不是做虚拟地址到物理地址的转换么?系统启动完毕后MMU肯定是启动了的。
可是怎么写地址的时候还是没有启动MMU之前的地址呢?
在S3C2440手册里面的所有系统映射地址的操作,在系统启动前和系统启动后如果想对这个地址操作的话,方法是一样的么?(即不管什么时候都还是读取手册里面规定的地址)
还有,系统启动成功后,在程序里面对某个地址的读取和写入,是直接操作的物理地址么?
还是什么。
问题有点多~~~~ 大家不要见怪啊。 |
|