那些年,我踩过的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字节指令
自学汇编, 哪哪都是坑啊,喔喔。。。。。。。。。。。。。。。。。。。。。。。。。加油吧, 大叔。。。。哈。。。。