一、barrier指令DSB,DMB,ISB,fence——内存屏障,指令屏障

最近工作中遇到一个问题,大致描述一下:

        我们SOC用的arm cortex m7内核,在设计时设计人员图方便,将SPI controller的寄存器(即原本应该是APB空间)放在了0x60000000的某一块空间(此空间arm的memory定义区间为external memory),然后同时把SPI flash的存储空间也映射在了0x60000000的这一块区间内。后者将spi flash memory映射在此区间内其实时合理的。但是将spi controller的寄存器也放在这块空间,验证人员只验证了对寄存器的访问,是可以的,此时并没有发现什么问题。

        说明一下,spi controller用的synopsis的design ware IP:SSI。

        SSI要求在设置一些配置寄存器前必须先disable SSI模块,所以软件先对该寄存器设置,即对使能寄存器下disable=0,然后开始对一些配置寄存器对配置设定,比如位宽,clock divider等。注意有个前提,SOC powerup之后,使能寄存器默认是enable的。!所以还必须提前disable动作。

        debug软件时发现,在disable后的第一个配置寄存器的设定总是写不进去!

        后来通过验证simulation发现,在CPU出来的bus上,disable寄存器的设定竟然在第一个配置寄存器设定的后面,可是软件明明时先设定的disable。所以导致第一个配置寄存器的配置软件这边始终看不到生效!!!!

        至于原因,我们猜测时arm cortex-m7 cpu认为0x60000000区域是external memory区域,再加上cm7支援乱序发射双发射等等因素,导致cpu往spi

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

89er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值