很简单的问题,如何给一个寄存器赋值

guan323333 2009-12-30 02:59:55
小弟最近在尝试学写驱动,有个很简单的问题,比如我想往某个寄存器里(地址0x9000000)写入0001,应该怎么写,给个代码 谢谢
...全文
1797 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
guan323333 2010-01-06
  • 打赏
  • 举报
回复
谢谢大家的回答,如4L 5L所说,需要先IOREMAP下,不过还是谢谢1L
joyself 2009-12-30
  • 打赏
  • 举报
回复
如楼上所说,需要先映射到虚拟地址

至于读写,推荐使用__raw_readl 和 __raw_writel之类的函数/宏
帅得不敢出门 2009-12-30
  • 打赏
  • 举报
回复
这个不一定吧
如果寄存器地址需要先映射呢?
那么只有映射后才可操作的

对于其地址最好不要直接操作 而是用相应的 read write系列函数操作

Wenxy1 2009-12-30
  • 打赏
  • 举报
回复

const volatile unsigned int *reg_1=(unsigned int *)0x9000000; /* 这样更安全 */
*reg_1 = 0x0001;
deep_pro 2009-12-30
  • 打赏
  • 举报
回复
如果寄存器是32位的 就要改为
unsigned int *p=(unsigned int *)0x9000000;
*p=0x0001;

同时要注意大小端对齐
deep_pro 2009-12-30
  • 打赏
  • 举报
回复
unsigned char *p=(unsigned char *)0x9000000;
*p=0x0001;

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧