在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 2796|回复: 2

求教!s3c2410处理器在2.6.14内核下不能对spi的寄存器进行写操作

[复制链接]
发表于 2007-1-3 21:13:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我用的是s3c2410处理器,内核是2.6.14.1。
在使用ioremap进行io内存操作时,对物理
地址是0x58000000到0x58000010的A/D,和
地址是0x59000000到0x59000034的spi只能
读出它们复位时的值,却不能写寄存器。
而其它的寄存器地址均能正常读写。经
在ADS下测试,A/D和SPI均能正常工作,只是
在2.6.14下不能写。
望牛x赐教!感激不尽!
发表于 2007-1-9 11:44:34 | 显示全部楼层
坐沙发
我不知道,
发表于 2009-1-5 15:35:07 | 显示全部楼层
这个问题也困扰了我很久。今天才找到答案。
   SPI,ADC,等都是依靠时钟工作的,我们的内核(或boot loader)很可能把他们相应的时钟关闭了以节省能耗。这些单元在没有时钟的情况下是不能工作的,也就不能向里面写内容,只能读取。
   在内核里,我们可以读取CLKCON值看其对应的时钟是否被关闭了,如果是则应该打开,这样就可以对寄存器进行读写了!可以参考红色部分
#include <linux/module.h>
#include <asm/io.h>
#include <linux/ioport.h>
#include<linux/kernel.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
     unsigned  kk;
      struct resource *io_ptr;
          void *iomem1,*iomem2;
io_ptr=request_mem_region(0x4C00000C,0x10000000,"adc-reg");
     if(io_ptr)printk("OK\n");
         else printk("Fault\n");
iomem1  =ioremap(0x4C00000C,0x100);
if(!(iomem1))printk("ioremap error\n");
else  printk("ioremap ok\n");
               mb();
       kk=readl(iomem1);
       writel(kk|0x8000,iomem1);//开启AD的时钟
      mb();
        kk=readl(iomem1);
       printk(KERN_ALERT"%x\n",kk);
    iomem2=ioremap(0x58000000,0x10);
   writel(0x45,iomem2);
        mb();
   kk=readl(iomem2);
     printk("%x\n",kk);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 11:23 , Processed in 0.015740 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表