1 /*---------------------------------------------------------------------------*
2 Project: TwlSDK - MI
3 File: mi_dma_hblank.c
4
5 Copyright 2003-2008 Nintendo. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Date:: 2008-10-16#$
14 $Rev: 8957 $
15 $Author: yada $
16 *---------------------------------------------------------------------------*/
17
18 #ifdef SDK_ARM9
19 #include <nitro.h>
20 #include "../include/mi_dma.h"
21
22 /*---------------------------------------------------------------------------*
23 Name: MI_HBlankDmaCopy32
24
25 Description: HBlank DMA copy.
26 32bit.
27
28 Arguments: dmaNo : DMA channel No.
29 src : source address
30 dest : destination address
31 size : transfer size (byte)
32
33 Returns: None
34 *---------------------------------------------------------------------------*/
MI_HBlankDmaCopy32(u32 dmaNo,const void * src,void * dest,u32 size)35 void MI_HBlankDmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size)
36 {
37 MIi_ASSERT_DMANO(dmaNo);
38 MIi_ASSERT_SRC_ALIGN4(src);
39 MIi_ASSERT_DEST_ALIGN4(dest);
40 MIi_WARNING_ADDRINTCM(src, size);
41 MIi_WARNING_ADDRINTCM(dest, size);
42
43 MIi_CheckAnotherAutoDMA(dmaNo, MI_DMA_TIMING_H_BLANK);
44 MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, MI_DMA_SRC_INC);
45 if (size == 0)
46 {
47 return;
48 }
49
50 MI_WaitDma(dmaNo);
51 // MIi_DmaSetParams(dmaNo, (u32)src, (u32)dest, MI_CNT_HBCOPY32(size));
52 MIi_DmaSetParameters(dmaNo, (u32)src, (u32)dest, MI_CNT_HBCOPY32(size), 0);
53 }
54
55 /*---------------------------------------------------------------------------*
56 Name: MI_HBlankDmaCopy16
57
58 Description: HBlank DMA copy.
59 16bit.
60
61 Arguments: dmaNo : DMA channel No.
62 src : source address
63 dest : destination address
64 size : transfer size (byte)
65
66 Returns: None
67 *---------------------------------------------------------------------------*/
MI_HBlankDmaCopy16(u32 dmaNo,const void * src,void * dest,u32 size)68 void MI_HBlankDmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size)
69 {
70 MIi_ASSERT_DMANO(dmaNo);
71 MIi_ASSERT_SRC_ALIGN2(src);
72 MIi_ASSERT_DEST_ALIGN2(dest);
73 MIi_WARNING_ADDRINTCM(src, size);
74 MIi_WARNING_ADDRINTCM(dest, size);
75
76 MIi_CheckAnotherAutoDMA(dmaNo, MI_DMA_TIMING_H_BLANK);
77 MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, MI_DMA_SRC_INC);
78 if (size == 0)
79 {
80 return;
81 }
82
83 MI_WaitDma(dmaNo);
84 MIi_DmaSetParameters(dmaNo, (u32)src, (u32)dest, MI_CNT_HBCOPY16(size), 0);
85 }
86
87 /*---------------------------------------------------------------------------*
88 Name: MI_HBlankDmaCopy32If
89
90 Description: HBlank DMA copy.
91 32bit.
92 occur interrupt when finish DMA.
93
94 Arguments: dmaNo : DMA channel No.
95 src : source address
96 dest : destination address
97 size : transfer size (byte)
98
99 Returns: None
100 *---------------------------------------------------------------------------*/
MI_HBlankDmaCopy32If(u32 dmaNo,const void * src,void * dest,u32 size)101 void MI_HBlankDmaCopy32If(u32 dmaNo, const void *src, void *dest, u32 size)
102 {
103 MIi_ASSERT_DMANO(dmaNo);
104 MIi_ASSERT_SRC_ALIGN4(src);
105 MIi_ASSERT_DEST_ALIGN4(dest);
106 MIi_WARNING_ADDRINTCM(src, size);
107 MIi_WARNING_ADDRINTCM(dest, size);
108
109 MIi_CheckAnotherAutoDMA(dmaNo, MI_DMA_TIMING_H_BLANK);
110 MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, MI_DMA_SRC_INC);
111 if (size == 0)
112 {
113 return;
114 }
115
116 MI_WaitDma(dmaNo);
117 MIi_DmaSetParameters(dmaNo, (u32)src, (u32)dest, MI_CNT_HBCOPY32_IF(size), 0);
118 }
119
120 /*---------------------------------------------------------------------------*
121 Name: MI_HBlankDmaCopy16If
122
123 Description: HBlank DMA copy.
124 16bit.
125 occur interrupt when finish DMA.
126
127 Arguments: dmaNo : DMA channel No.
128 src : source address
129 dest : destination address
130 size : transfer size (byte)
131
132 Returns: None
133 *---------------------------------------------------------------------------*/
MI_HBlankDmaCopy16If(u32 dmaNo,const void * src,void * dest,u32 size)134 void MI_HBlankDmaCopy16If(u32 dmaNo, const void *src, void *dest, u32 size)
135 {
136 MIi_ASSERT_DMANO(dmaNo);
137 MIi_ASSERT_SRC_ALIGN2(src);
138 MIi_ASSERT_DEST_ALIGN2(dest);
139 MIi_WARNING_ADDRINTCM(src, size);
140 MIi_WARNING_ADDRINTCM(dest, size);
141
142 MIi_CheckAnotherAutoDMA(dmaNo, MI_DMA_TIMING_H_BLANK);
143 MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, MI_DMA_SRC_INC);
144 if (size == 0)
145 {
146 return;
147 }
148
149 MI_WaitDma(dmaNo);
150 MIi_DmaSetParameters(dmaNo, (u32)src, (u32)dest, MI_CNT_HBCOPY16_IF(size), 0);
151 }
152 #endif // SDK_ARM9
153