您好!
在 dmaReqAssign 方法中写入 DREQASI DMA 寄存器时、我会观察到异常行为。
以下操作码可产生正确的行为:
e3a0003f MOV R0、63
e1a01103 MOV R1、R3、LSL 2.
e1a05210 MOV R5、R0、LSL R2
e5110LDR 接口 R0、[R1、-0xFAD]
e1c00005 BIC R0、R0、R5
e5010STR STR R0、[R1、-0xFAD]
e1a01103 MOV R1、R3、LSL 2.
e5110LDR 接口 R0、[R1、-0xFAD]
e1800214 ORR R0、R0、R4 ,LSL R2
e5010STR STR R0、[R1、-0xFAD]
以下操作码会使 DMA 停止:
e1a00103 MOV R0、R3、LSL 2.
e5100LDR R0、[R0、-0x]接口
e3a0503f MOV R5、63
e1a05215 MOV R5、R5、LSL R2
e1c01005 BIC R1、R0、R5
e1a00103 MOV R0、R3、LSL 2.
e5001STR STr 的接口 R1、[R0、-0xFAD]
e1a00103 MOV R0、R3、LSL 2.
e5100LDR R0、[R0、-0x]接口
e1a05214 MOV R5、R4 ,LSL R2
e1851000 ORR R1、R5、R0
e1a00103 MOV R0、R3、LSL 2.
e5001STR STr 的接口 R1、[R0、-0xFAD]
这两组运算代码都将 DREQASI 寄存器保持相同的结束状态:
0x1e1f0203
但是、一个会导致 DMA 停止运行、另一个不会。
访问 DREQASI 寄存器是否有什么特别之处? 这种行为非常令人不安。
谢谢!