- 论坛徽章:
- 0
|
在S3C2410的开发平台上经过下面的测试:
1、
volatile unsigned long *p_iiccon;
unsigned long temp = 0;
p_iiccon = (unsigned long *)ioremap(0x56000000, 4);
temp =(unsigned long) ioread32 (p_iiccon);
mb();
printk("0x%x\n", temp); //结果是0x7fffff
iowrite32(0x3fffff, p_iiccon);
mb();
temp =(unsigned long) ioread32 (p_iiccon);
mb();
printk("0x%x\n", temp); //结果是0x3fffff
从结果可以看出来操作是成功的
2、
volatile unsigned long *p_iiccon;
unsigned long temp = 0;
p_iiccon = (unsigned long *)ioremap(0x56000000, 4);
temp = *p_iiccon;
mb();
printk("0x%x\n", temp); //结果是0x7fffff
*p_iiccon = 0x3fffff;
mb();
temp = *p_iiccon
mb();
printk("0x%x\n", temp); //结果是0x3fffff
从结果可以看出来操作是成功的
3、
volatile unsigned long *p_iiccon;
unsigned long temp = 0;
p_iiccon = (unsigned long *)ioremap(0x54000000, 4);
temp =(unsigned long) ioread32 (p_iiccon);
mb();
printk("0x%x\n", temp); //结果是0x0
iowrite32(0x3f, p_iiccon);
mb();
temp =(unsigned long) ioread32 (p_iiccon);
mb();
printk("0x%x\n", temp); //结果是0x0
从结果可以看出来操作是不成功的
4、
volatile unsigned long *p_iiccon;
unsigned long temp = 0;
p_iiccon = (unsigned long *)ioremap(0x54000000, 4);
temp =(unsigned long) ioread8 (p_iiccon);
mb();
printk("0x%x\n", temp);
iowrite8(0x3f, p_iiccon); //结果是0x0
mb();
temp =(unsigned long) ioread8 (p_iiccon);
mb();
printk("0x%x\n", temp); //结果是0x0
从结果可以看出来操作还是不成功的
5、
temp = *p_iiccon;
mb();
printk("0x%x\n", temp); //结果是0x0
*p_iiccon = 0x3f;
mb();
temp = *p_iiccon;
mb();
printk("0x%x\n", temp); //结果是0x0
从结果可以看出来操作还是不成功的
从上述5种情况对比,发现唯一的区别就是映射的物理地址不同,映射GPIO的地址后操作可以成功,但是映射IIC寄存器的地址操作是失败的,这是为什么呢?
(注:使用的内核是2.6.14.1, 内核配置未选择IIC支持) |
|