diff options
author | Cleverking2003 <30466983+Cleverking2003@users.noreply.github.com> | 2020-06-12 20:59:37 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-12 20:59:37 +0300 |
commit | a2dc5cb0cf5db3b4d8103ab5abc6e67faae2e3d3 (patch) | |
tree | b39057449acad0ae7866534e5bdbad99091bd9f7 /arm7/lib/src/MI_dma.c | |
parent | 5c34c97254b35f93d9254e63265446f9f7d50817 (diff) | |
parent | 45f97db651b38ea41d33402efea293e50a31725a (diff) |
Merge branch 'master' into master
Diffstat (limited to 'arm7/lib/src/MI_dma.c')
-rw-r--r-- | arm7/lib/src/MI_dma.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/arm7/lib/src/MI_dma.c b/arm7/lib/src/MI_dma.c new file mode 100644 index 00000000..fc2ff0c9 --- /dev/null +++ b/arm7/lib/src/MI_dma.c @@ -0,0 +1,36 @@ +#include "function_target.h" +#include "MI_dma.h" +#include "OS_system.h" + +ARM_FUNC void MI_WaitDma(u32 channel) { + OSIntrMode mode = OS_DisableInterrupts(); + vu32 * addr = (vu32 *)(REG_ADDR_DMA0SAD + (channel * 3 + 2) * 4); + while(addr[0] & 0x80000000) ; + if (channel == 0) { + addr = (vu32 *)(REG_ADDR_DMA0SAD + channel * 12); + addr[0] = 0; + addr[1] = 0; + addr[2] = 0x81400001; + } + mode = OS_RestoreInterrupts(mode); +} + +ARM_FUNC void MI_StopDma(u32 channel) { + OSIntrMode mode = OS_DisableInterrupts(); + vu16 * addr = (vu16 *)(REG_ADDR_DMA0SAD + (channel * 6 + 5) * 2); + addr[0] &= ~(DMA_START_MASK | DMA_REPEAT); + addr[0] &= ~DMA_ENABLE; + { + s32 dummy = addr[0]; + } + { + s32 dummy = addr[0]; + } + if (channel == 0) { + vu32 * addr32 = (vu32 *)(REG_ADDR_DMA0SAD + channel * 12); + addr32[0] = 0; + addr32[1] = 0; + addr32[2] = 0x81400001; + } + mode = OS_RestoreInterrupts(mode); +} |