那些年,我踩过的ARM汇编的坑之I2C

那些年,我踩过的ARM汇编的坑之I2C

 

  最近在做IMX6ULL的开发板用ARM 汇编实现I2C的功能, 在 读写到I2C控制器中的寄存器时发现卡死在ldr指令上面了

 

  比如我在ARM汇编代码里面是这样读 I2C_I2CR, 代码如下

  ldr r0, =0x021A0008

  ldr r1, [r0]

可是在代码运行时候就卡死在了 ldr r1, [r0] 这一行代码上面了。这个问题也埋了我两天,最后对照官方SDK

 

和芯片手册

 

 发现I2C控制器的寄存器都是16位的

而我上面出现卡死的汇编代码 ldr r1, [r0] 是加载32位的,最后怀疑问题就出在了这里, 于是我用了ldrh r1, [r0]后,程序终于可以正常运行了

正确的ARM汇编代码修正如下:

 

  ldr r0, =0x021A0008

  ldrh r1, [r0]

注: ldrh 指令为加载2字节指令

自学汇编, 哪哪都是坑啊,喔喔。。。。。。。。。。。。。。。。。。。。。。。。。加油吧, 大叔。。。。哈。。。。

 

posted on 2021-11-24 15:07  一个大菜B  阅读(129)  评论(0编辑  收藏  举报