Hello,
I am observing strange behavior when writing to the DREQASI DMA Register in the dmaReqAssign method.
The following OP codes produce the correct behavior:
e3a0003f MOV R0, 63
e1a01103 MOV R1, R3 <i>, LSL 2
e1a05210 MOV R5, R0, LSL R2 <j>
e5110fac LDR R0,[R1,-0xfac]
e1c00005 BIC R0, R0, R5
e5010fac STR R0,[R1,-0xfac]
e1a01103 MOV R1, R3 <i>, LSL 2
e5110fac LDR R0,[R1,-0xfac]
e1800214 ORR R0, R0, R4 <reqline>, LSL R2 <j>
e5010fac STR R0,[R1,-0xfac]
The following OP codes stall the DMA:
e1a00103 MOV R0, R3 <i>, LSL 2
e5100fac LDR R0,[R0,-0xfac]
e3a0503f MOV R5, 63
e1a05215 MOV R5, R5, LSL R2 <j>
e1c01005 BIC R1, R0, R5
e1a00103 MOV R0, R3 <i>, LSL 2
e5001fac STR R1,[R0,-0xfac]
e1a00103 MOV R0, R3 <i>, LSL 2
e5100fac LDR R0,[R0,-0xfac]
e1a05214 MOV R5, R4 <reqline>, LSL R2 <j>
e1851000 ORR R1, R5, R0
e1a00103 MOV R0, R3 <i>, LSL 2
e5001fac STR R1,[R0,-0xfac]
Both sets of op codes leave the DREQASI Register with the same end state:
0x1e1f0203
But one causes the DMA to stop functioning and the other do not.
Is there something special about accessing DREQASI registers? The behavior is very troubling.
Thanks!