s3c6410 linux2.6.29写寄存器的问题

时间:2021-09-11 02:14:49
今天写了个在linux 2.6.29下测试 IIS0的测试 driver, 碰到一个奇怪的问题,模块代码如下:

static int __devinit iis0_test_init(void)
{
    unsigned char *virt;
    
    virt = ioremap_nocache(0x7f002000, 0x100);
    
    printk("IISCON a = 0x%x\n", *((unsigned int*)(virt)) );
    *((unsigned int*)(virt)) = (1<<2)|1;
    printk("IISCON b = 0x%x\n", *((unsigned int*)(virt)) );
    printk("IISCON d = 0x%x\n", *((unsigned int*)(virt)) );

    iounmap(virt);
    return 0;


static void  __exit iis0_test_exit(void)
{
}

module_init(iis0_test_init);
module_exit(iis0_test_exit);

MODULE_LICENSE("GPL");

编译加载进去运行,发现 register 写不进去,运行的结果是:

IISCON a=0xe00
IISCON b=0x5
IISCON d=0xe00

IISCON 的寄存器默认值是 0xe00, 也就是说,写没有生效。
这个问题只是在 linux 中运行有问题,在 u-boot 中我测试过是可以写进去的,没有问题的,不知道原因是什么,
哪位高手能帮帮忙啊,谢了!

5 个解决方案

#1


自己解决了

#2


怎么解决的?

#3


PCLK的时钟需要打开,系统默认没有打开,打开了就OK了

#4


?????

#5


引用 3 楼 chuqingwu 的回复:
PCLK的时钟需要打开,系统默认没有打开,打开了就OK了


是啊,外部端口都用到PCLK分频的。

#1


自己解决了

#2


怎么解决的?

#3


PCLK的时钟需要打开,系统默认没有打开,打开了就OK了

#4


?????

#5


引用 3 楼 chuqingwu 的回复:
PCLK的时钟需要打开,系统默认没有打开,打开了就OK了


是啊,外部端口都用到PCLK分频的。