PowerPC处理器的寄存器大端小端影响写入感想

先放结论:没啥影响。

这两天又要重新捡起来MPC8377的板子开始做项目,因为SylixOS的内核有所变动,网卡协议栈多做了一层封装,所以网卡驱动也有相应变化,需要重新修改一下。然后考虑到上次我写的中断驱动实在太丑,看到人家工程师写的中断驱动代码比我好看很多,所以决心在重写网卡驱动前先把中断控制器驱动模仿着重写一下。但是写的时候发现了一个问题:

 

中断控制器寄存器是内存映射寄存器,以中断屏蔽寄存器SIMSR_H为例子,在芯片手册上面,是这么画的和描述的:

我们知道,PPC是大端模式,也就是说,数据高位存在内存低地址,0x12345678这个值存在内存中时,地址由低到高存的就是12 34 56 78,而ARM或者X86的地址由低到高应该存的是78 56 34 12,那么问题来了:

比如我要把这个寄存器的bit 0置1允许TSEC1的发送中断,问题来了,因为PPC是大端模式,那么我写入这个寄存器的值,应该是:0x80000000还是0x00000001呢?

之前非常纠结,可以说纠结了一下午,改了又改(因为一些原因板子没在身边),还跑到SylixOS的群里面问了一些比较蠢的问题,里面的一个大神给我说的是:

“大小端只在零存整取或整存零取时才需要考虑。”,我这种整存整取的情况,应该是不需要考虑大端小端问题的,也就是说,我要把最低位置1的话(因为我问的就是最低位置1),无论大端小端都应该写入0x00000001。

 

不过!重点来了,其实按照手册上这么画的,这个最高位和最低位其实是反的,也就是说,其实手册上面的bit 0是实际上的最高位……也就是说……我实际上想把bit 0置1的话,应该是无论大端小端都写入0x80000000。

 

实际上,按照手册上的寄存器的bit写法对应着写值就可以了,根本不用纠结大端小端的问题(实际上我上次写的时候也是这么干的,不过那是因为根本没想起来PPC是大端模式,直接忽略了…)。真是又学到了。

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值