核心板上面带的4个led的裸机驱动,自己也看了,通过cpkcon和gpkdata操作的,两个寄存器的地址都在三星的s3c6410的datasheet中可以找到
可是地板上面的led驱动程序很奇怪,从原理图上面看led是连接到了sdram上的数据总线上,可是在leds_mmu的裸机代码中,在操作这几个led时用的却是虚拟地址,而不是物理地址
下面看看leds_mmu中的代码
复制代码- void delay()
- {
- volatile int i = 0x10000;
- while (i--);
- }
- int main()
- {
- int i = 0;
-
- // 虚拟地址
- volatile unsigned long *gpkcon0 = (volatile unsigned long *)0x10008800;
- volatile unsigned long *gpkdat = (volatile unsigned long *)0x10008808;
-
- *gpkcon0 = (*gpkcon0 & ~(0xffff<<16)) | (0x1111<<16);
-
- while (1)
- {
- *gpkdat = (*gpkdat & ~(0xf<<4)) | (i<<4);
- i++;
- if (i == 16)
- i = 0;
- delay(0x10000);
- }
-
- return 0;
- }
|
现在我有疑问的地方是 0x10008808;这个虚拟地址是怎么来的?
三星的手册上面是看不到的,有知道的说下吧