主题 : tiny6410 leds_mmu代码中的疑惑 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 29393
精华: 0
发帖: 31
金钱: 155 两
威望: 31 点
贡献值: 0 点
综合积分: 62 分
注册时间: 2010-09-27
最后登录: 2014-06-26
楼主  发表于: 2014-06-14 22:22

 tiny6410 leds_mmu代码中的疑惑

核心板上面带的4个led的裸机驱动,自己也看了,通过cpkcon和gpkdata操作的,两个寄存器的地址都在三星的s3c6410的datasheet中可以找到

可是地板上面的led驱动程序很奇怪,从原理图上面看led是连接到了sdram上的数据总线上,可是在leds_mmu的裸机代码中,在操作这几个led时用的却是虚拟地址,而不是物理地址

下面看看leds_mmu中的代码

复制代码
  1. void delay()
  2. {
  3.     volatile int i = 0x10000;
  4.     while (i--);
  5. }
  6. int main()
  7. {
  8.     int i = 0;
  9.     
  10.     // 虚拟地址
  11.     volatile unsigned long *gpkcon0 = (volatile unsigned long *)0x10008800;
  12.     volatile unsigned long *gpkdat = (volatile unsigned long *)0x10008808;
  13.     
  14.     *gpkcon0 = (*gpkcon0 & ~(0xffff<<16)) | (0x1111<<16);
  15.     
  16.     while (1)
  17.     {
  18.         *gpkdat = (*gpkdat & ~(0xf<<4)) | (i<<4);
  19.         i++;
  20.         if (i == 16)
  21.             i = 0;
  22.         delay(0x10000);
  23.     }
  24.     
  25.     return 0;
  26. }


现在我有疑问的地方是 0x10008808;这个虚拟地址是怎么来的?
三星的手册上面是看不到的,有知道的说下吧