summaryrefslogtreecommitdiff
path: root/arm7/lib/src/MI_dma.c
diff options
context:
space:
mode:
authorCleverking2003 <30466983+Cleverking2003@users.noreply.github.com>2020-06-12 20:59:37 +0300
committerGitHub <noreply@github.com>2020-06-12 20:59:37 +0300
commita2dc5cb0cf5db3b4d8103ab5abc6e67faae2e3d3 (patch)
treeb39057449acad0ae7866534e5bdbad99091bd9f7 /arm7/lib/src/MI_dma.c
parent5c34c97254b35f93d9254e63265446f9f7d50817 (diff)
parent45f97db651b38ea41d33402efea293e50a31725a (diff)
Merge branch 'master' into master
Diffstat (limited to 'arm7/lib/src/MI_dma.c')
-rw-r--r--arm7/lib/src/MI_dma.c36
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);
+}