update about dma.

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@78 4ee2a332-4b2b-5046-8439-1ba90f034370
This commit is contained in:
nakasima 2007-05-23 11:29:59 +00:00
parent d81a08a99b
commit af7ab065d2
15 changed files with 1773 additions and 152 deletions

View File

@ -9,11 +9,12 @@
#twl p39,,,,,,,,,,,,,,,,,,,,,,,,
0x4010,,MC_DET,8,rw,MI,volatile,MODE2,6,2,DET2,4,1,MODE1,2,2,DET1,0,1,,,,,,
0x4011,,MC_SWP,8,rw,MI,volatile,SWP,7,1,,,,,,,,,,,,,,,
0x4012,,MC_CHT,16,rw,MI,volatile,,,,,,,,,,,,,,,,,,
0x4040,,WRAM_A0,8,rw,MI,volatile,E,7,1,OFS,2,2,MST,0,1,,,,,,,,,
0x4041,,WRAM_A1,8,rw,MI,volatile,E,7,1,OFS,2,2,MST,0,1,,,,,,,,,
0x4042,,WRAM_A2,8,rw,MI,volatile,E,7,1,OFS,2,2,MST,0,1,,,,,,,,,
0x4043,,WRAM_A3,8,rw,MI,volatile,E,7,1,OFS,2,2,MST,0,1,,,,,,,,,
0x4044,,WRAM_B0,8,rw,MI,volatile,E,7,1,OFS,2,3,MST,0,2,,,,,,,,,
0x4044,,WRAM_B0,8,rw,MI,volatile,E,7,1,OFS,2,3,MST,0,2
0x4045,,WRAM_B1,8,rw,MI,volatile,E,7,1,OFS,2,3,MST,0,2
0x4046,,WRAM_B2,8,rw,MI,volatile,E,7,1,OFS,2,3,MST,0,2
0x4047,,WRAM_B3,8,rw,MI,volatile,E,7,1,OFS,2,3,MST,0,2
@ -29,7 +30,7 @@
0x4051,,WRAM_C5,8,rw,MI,volatile,E,7,1,OFS,2,3,MST,0,2
0x4052,,WRAM_C6,8,rw,MI,volatile,E,7,1,OFS,2,3,MST,0,2
0x4053,,WRAM_C7,8,rw,MI,volatile,E,7,1,OFS,2,3,MST,0,2
0x4054,,WRAM_A_MAP,32,rw,MI,volatile,END,20,9,IMG,12,2,START,4,8
0x4054,,WRAM_A_MAP,32,rw,MI,volatile,END,20,9,IMG,12,2,START,4,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x4058,,WRAM_B_MAP,32,rw,MI,volatile,END,19,10,IMG,12,2,START,3,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x405c,,WRAM_C_MAP,32,rw,MI,volatile,END,19,10,IMG,12,2,START,3,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x4060,,WRAM_A_LOCK,8,rw,MI,volatile,A3,3,1,A2,2,1,A1,1,1,A0,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
@ -45,7 +46,7 @@
0x00a,,BG1CNT,16,rw,G2,volatile,SCREENSIZE,14,2,BGPLTTSLOT,13,1,SCREENBASE,8,5,COLORMODE,7,1,MOSAIC,6,1,CHARBASE,2,4,PRIORITY,0,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x00c,,BG2CNT,16,rw,G2,volatile,SCREENSIZE,14,2,AREAOVER,13,1,SCREENBASE,8,5,COLORMODE,7,1,MOSAIC,6,1,CHARBASE,2,4,PRIORITY,0,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x00e,,BG3CNT,16,rw,G2,volatile,SCREENSIZE,14,2,AREAOVER,13,1,SCREENBASE,8,5,COLORMODE,7,1,MOSAIC,6,1,CHARBASE,2,4,PRIORITY,0,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# BGデータ参照開始点設定、参照方向設定 nitro p69。 BG0OFSはp 175 でも登場,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# BGデータ参照開始点設定、参照方向設定 nitro p69。 BG0OFSはp 175 でも登場,,,,,,,,,,,,,,,
0x010,,BG0OFS,32,w,G2,volatile,VOFFSET,16,9,HOFFSET,0,9,,,
0x010,,BG0HOFS,16,w,G2,volatile,OFFSET,0,9,,,,,,
0x012,,BG0VOFS,16,w,G2,volatile,OFFSET,0,9,,,,,,
@ -77,7 +78,7 @@
0x046,,WIN1V,16,w,G2,volatile,UPY,8,8,DOWNY,0,8,,,
0x048,,WININ,16,rw,G2,volatile,WIN1IN,8,6,WIN0IN,0,6,,,
0x04a,,WINOUT,16,rw,G2,volatile,OBJWININ,8,6,WINOUT,0,6,,,
#モザイク nitro p99,,,,,,,,,,,,,,,
#モザイク nitro p99,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x04c,,MOSAIC,16,w,G2,volatile,OBJVSIZE,12,4,OBJHSIZE,8,4,BGVSIZE,4,4,BGHSIZE,0,4,,,,,,,,,,,,,,,,,,,,,,,,
#カラー特殊効果 nitro p97、 p177p178,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x050,,BLDCNT,16,rw,G2,volatile,PLANE2,8,6,EFFECT,6,2,PLANE1,0,6,,,,,,,,,,,,,,,,,,,,,,,,,,,
@ -93,7 +94,7 @@
0x06a,,DISP_MMEM_FIFO_H,16,rw,GX,volatile,RED,0,5,GREEN,5,5,BLUE,10,5,,,,,,,,,,,,,,,,,,,,,,,,,,,
#マスター輝度 nitro p50,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x06c,,MASTER_BRIGHT,16,rw,GX,volatile,E_MOD,14,2,E_VALUE,0,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#ビデオ出力 nitro p51,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#ビデオ出力 nitro p51,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x070,,TVOUTCNT,16,w,GX,volatile,COMMAND3,8,4,COMMAND2,4,4,COMMAND,0,4,,,,,,,,,,,,,,,
#DMA nitro p179,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x0b0,,DMA0SAD,32,rw,MI,volatile,DMASRC,0,28,,,,,,,,,,,,,,,,,,,,,
@ -109,7 +110,7 @@
0x0d8,,DMA3DAD,32,rw,MI,volatile,DMADEST,0,28,,,,,,,,,,,,,,,,,,,,,
0x0dc,,DMA3CNT,32,rw,MI,volatile,E,31,1,I,30,1,MODE,27,3,SB,26,1,CM,25,1,SAR,23,2,DAR,21,2,WORDCNT,0,21
0x0e0,,DMA0_CLR_DATA,32,rw,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,
0x0e4,,DMA1_CLR_DATA,32,rw,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,
0x0e4,,DMA1_CLR_DATA,32,rw,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x0e8,,DMA2_CLR_DATA,32,rw,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x0ec,,DMA3_CLR_DATA,32,rw,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,
# twl p53 p67,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
@ -141,39 +142,39 @@
0x4164,,DMA7WCNT,32,rw,MI,volatile,W,0,24,,,,,,,,,,,,,,,,,,,,,,,,
0x4168,,DMA7BCNT,32,rw,MI,volatile,PS,16,2,BI,0,16,,,,,,,,,,,,,,,,,,,,,
0x416c,,DMA7FDATA,32,rw,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x4170,,DMA7CNT,32,rw,MI,volatile,E,31,1,I,30,1,CM,29,1,TIMING,24,5,BSIZE,16,4,SRLD,15,1,SAR,13,2,DRLD,12,1,DAR,10,2
#タイマ nitro p181,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x100,,TM0CNT_L,16,rw,OS,volatile,TIMER0CNT,0,16,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x102,,TM0CNT_H,16,rw,OS,volatile,E,7,1,I,6,1,PS,0,2,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x104,,TM1CNT_L,16,rw,OS,volatile,TIMER1CNT,0,16,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x106,,TM1CNT_H,16,rw,OS,volatile,E,7,1,I,6,1,CH,2,1,PS,0,2,,,,,,,,,,,,,,,,,,,,,,,,
0x108,,TM2CNT_L,16,rw,OS,volatile,TIMER2CNT,0,16,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x10a,,TM2CNT_H,16,rw,OS,volatile,E,7,1,I,6,1,CH,2,1,PS,0,2,,,,,,,,,,,,,,,,,,,,,,,,
0x10c,,TM3CNT_L,16,rw,OS,volatile,TIMER2CNT,0,16,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x10e,,TM3CNT_H,16,rw,OS,volatile,E,7,1,I,6,1,CH,2,1,PS,0,2,,,,,,,,,,,,,,,,,,,,,,,,
#SIO nitro p14-1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x120,,SIODATA32,32,rw,EXI,volatile,H,16,16,L,0,16,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x128,,SIOCNT,16,rw,EXI,volatile,TSEND,3,1,TRECV,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x12c,,SIOSEL,16,rw,EXI,volatile,SEL,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#キー nitro p182,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x130,,KEYINPUT,16,r,PAD,volatile,L,9,1,R,8,1,DOWN,7,1,UP,6,1,LEFT,5,1,RIGHT,4,1,START,3,1,SEL,2,1,B,1,1,A,0,1,,,,,,
0x4170,,DMA7CNT,32,rw,MI,volatile,E,31,1,I,30,1,CM,29,1,TIMING,24,5,BSIZE,16,4,SRLD,15,1,SAR,13,2,DRLD,12,1,DAR,10,2,,,
#タイマ nitro p181,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x100,,TM0CNT_L,16,rw,OS,volatile,TIMER0CNT,0,16,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x102,,TM0CNT_H,16,rw,OS,volatile,E,7,1,I,6,1,PS,0,2,,,,,,,,,,,,,,,,,,,,,
0x104,,TM1CNT_L,16,rw,OS,volatile,TIMER1CNT,0,16,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x106,,TM1CNT_H,16,rw,OS,volatile,E,7,1,I,6,1,CH,2,1,PS,0,2,,,,,,,,,,,,,,,,,,
0x108,,TM2CNT_L,16,rw,OS,volatile,TIMER2CNT,0,16,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x10a,,TM2CNT_H,16,rw,OS,volatile,E,7,1,I,6,1,CH,2,1,PS,0,2,,,,,,,,,,,,,,,,,,
0x10c,,TM3CNT_L,16,rw,OS,volatile,TIMER2CNT,0,16,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x10e,,TM3CNT_H,16,rw,OS,volatile,E,7,1,I,6,1,CH,2,1,PS,0,2,,,,,,,,,,,,,,,,,,
#SIO nitro p14-1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x120,,SIODATA32,32,rw,EXI,volatile,H,16,16,L,0,16,,,,,,,,,,,,,,,,,,,,,,,,
0x128,,SIOCNT,16,rw,EXI,volatile,TSEND,3,1,TRECV,2,1,,,,,,,,,,,,,,,,,,,,,,,,
0x12c,,SIOSEL,16,rw,EXI,volatile,SEL,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,
#キー nitro p182,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x130,,KEYINPUT,16,r,PAD,volatile,L,9,1,R,8,1,DOWN,7,1,UP,6,1,LEFT,5,1,RIGHT,4,1,START,3,1,SEL,2,1,B,1,1,A,0,1
0x132,,KEYCNT,16,rw,PAD,volatile,LOGIC,15,1,INTR,14,1,L,9,1,R,8,1,DOWN,7,1,UP,6,1,LEFT,5,1,RIGHT,4,1,START,3,1,SEL,2,1,B,1,1,A,0,1
#ARM7とのインタフェース nitro p187,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x180,,SUBPINTF,16,rw,PXI,volatile,I,14,1,IREQ,13,1,A9STATUS,8,4,A7STATUS,0,4,,,,,,,,,,,,,,,
0x184,,SUBP_FIFO_CNT,16,rw,PXI,volatile,E,15,1,ERR,14,1,RECV_RI,10,1,RECV_FULL,9,1,RECV_EMP,8,1,SEND_CL,3,1,SEND_TI,2,1,SEND_FULL,1,1,SEND_EMP,0,1
0x188,,SEND_FIFO,32,rw,PXI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x100000,,RECV_FIFO,32,rw,PXI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,
#メモリカード,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1a0,,MCCNT0,16,rw,MI,volatile,E,15,1,I,14,1,SEL,13,1,BUSY,7,1,MODE,6,1,BAUDRATE,0,2,,,,,,,,,
0x1a2,,MCD0,16,rw,MI,volatile,DATA,0,8,,,,,,,,,,,,,,,,,,,,,,,,
0x100010,,MCD1,32,rw,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1a4,,MCCNT1,32,rw,MI,volatile,START,31,1,WR,30,1,RESB,29,1,TRM,28,1,CT,27,1,PC,24,3,RDY,23,1,L2,16,6,L1,0,13
0x1a8,,MCCMD0,32,w,MI,volatile,CMD3,24,8,CMD2,16,8,CMD1,8,8,CMD0,0,8,,,,,,,,,,,,,,,
0x1ac,,MCCMD1,32,w,MI,volatile,CMD7,24,8,CMD6,16,8,CMD5,8,8,CMD4,0,8,,,,,,,,,,,,,,,
#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21a0,,MCCNT0_B,16,rw,MI,volatile,E,15,1,I,14,1,SEL,13,1,BUSY,7,1,MODE,6,1,BAUDRATE,0,2,,,,,,,,,
0x21a2,,MCD0_B,16,rw,MI,volatile,DATA,0,8,,,,,,,,,,,,,,,,,,,,,,,,
0x102010,,MCD1_B,32,rw,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,
#ARM7とのインタフェース nitro p187,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x180,,SUBPINTF,16,rw,PXI,volatile,I,14,1,IREQ,13,1,A9STATUS,8,4,A7STATUS,0,4,,,,,,,,,,,,,,,,,,,,,,,,
0x184,,SUBP_FIFO_CNT,16,rw,PXI,volatile,E,15,1,ERR,14,1,RECV_RI,10,1,RECV_FULL,9,1,RECV_EMP,8,1,SEND_CL,3,1,SEND_TI,2,1,SEND_FULL,1,1,SEND_EMP,0,1,,,,,,,,,
0x188,,SEND_FIFO,32,rw,PXI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x100000,,RECV_FIFO,32,rw,PXI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#メモリカード,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1a0,,MCCNT0,16,rw,MI,volatile,E,15,1,I,14,1,SEL,13,1,BUSY,7,1,MODE,6,1,BAUDRATE,0,2,,,,,,,,,,,,,,,,,,
0x1a2,,MCD0,16,rw,MI,volatile,DATA,0,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x100010,,MCD1,32,rw,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1a4,,MCCNT1,32,rw,MI,volatile,START,31,1,WR,30,1,RESB,29,1,TRM,28,1,CT,27,1,PC,24,3,RDY,23,1,L2,16,6,L1,0,13,,,,,,,,,
0x1a8,,MCCMD0,32,w,MI,volatile,CMD3,24,8,CMD2,16,8,CMD1,8,8,CMD0,0,8,,,,,,,,,,,,,,,,,,,,,,,,
0x1ac,,MCCMD1,32,w,MI,volatile,CMD7,24,8,CMD6,16,8,CMD5,8,8,CMD4,0,8,,,,,,,,,,,,,,,,,,,,,,,,
#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21a0,,MCCNT0_B,16,rw,MI,volatile,E,15,1,I,14,1,SEL,13,1,BUSY,7,1,MODE,6,1,BAUDRATE,0,2,,,,,,,,,,,,,,,,,,
0x21a2,,MCD0_B,16,rw,MI,volatile,DATA,0,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x102010,,MCD1_B,32,rw,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21a4,,MCCNT1_B,32,rw,MI,volatile,START,31,1,WR,30,1,RESB,29,1,TRM,28,1,CT,27,1,PC,24,3,RDY,23,1,L2,16,6,L1,0,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21a8,,MCCMD0_B,32,w,MI,volatile,CMD3,24,8,CMD2,16,8,CMD1,8,8,CMD0,0,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21ac,,MCCMD1_B,32,w,MI,volatile,CMD7,24,8,CMD6,16,8,CMD5,8,8,CMD4,0,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
@ -189,7 +190,7 @@
0x241,,VRAMCNT_B,8,w,GX,volatile,E,7,1,OFS,3,2,MST,0,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x242,,VRAMCNT_C,8,w,GX,volatile,E,7,1,OFS,3,2,MST,0,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x243,,VRAMCNT_D,8,w,GX,volatile,E,7,1,OFS,3,2,MST,0,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x244,,WVRAMCNT,32,w,GX,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x244,,WVRAMCNT,32,w,GX,volatile,,,,,,,,,
0x244,,VRAMCNT_E,8,w,GX,volatile,E,7,1,MST,0,3,,,
0x245,,VRAMCNT_F,8,w,GX,volatile,E,7,1,OFS,3,2,MST,0,3
0x246,,VRAMCNT_G,8,w,GX,volatile,E,7,1,OFS,3,2,MST,0,3
@ -205,38 +206,38 @@
0x294,,DIV_NUMER_H,32,rw,CP,volatile,,,,,,,,,
0x298,,DIV_DENOM,64,rw,CP,volatile,,,,,,,,,
0x298,,DIV_DENOM_L,32,rw,CP,volatile,,,,,,,,,
0x29c,,DIV_DENOM_H,32,rw,CP,volatile,,,,,,,,,
0x2a0,,DIV_RESULT,64,rw,CP,volatile,,,,,,,,,,,,,,,,,,,,,
0x2a0,,DIV_RESULT_L,32,rw,CP,volatile,,,,,,,,,,,,,,,,,,,,,
0x2a4,,DIV_RESULT_H,32,rw,CP,volatile,,,,,,,,,,,,,,,,,,,,,
0x2a8,,DIVREM_RESULT,64,rw,CP,volatile,,,,,,,,,,,,,,,,,,,,,
0x2a8,,DIVREM_RESULT_L,32,rw,CP,volatile,,,,,,,,,,,,,,,,,,,,,
0x2ac,,DIVREM_RESULT_H,32,rw,CP,volatile,,,,,,,,,,,,,,,,,,,,,
0x2b0,,SQRTCNT,16,rw,CP,volatile,BUSY,15,1,MODE,0,1,,,,,,,,,,,,,,,
0x2b4,,SQRT_RESULT,32,rw,CP,volatile,,,,,,,,,,,,,,,,,,,,,
#以下のSQRT_PARAM は、64ビットアクセスのほかに _H と _L を作りました。,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x2b8,,SQRT_PARAM,64,rw,CP,volatile,,,,,,,,,,,,,,,,,,,,,
0x2b8,,SQRT_PARAM_L,32,rw,CP,volatile,,,,,,,,,,,,,,,,,,,,,
0x2bc,,SQRT_PARAM_H,32,rw,CP,volatile,,,,,,,,,,,,,,,,,,,,,
#PAUSE page 19-43,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x300,,PAUSE,16,rw,OS,volatile,MOD,14,2,CHK,0,1,,,,,,,,,,,,,,,
#パワーコントロール nitro p35,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x29c,,DIV_DENOM_H,32,rw,CP,volatile,,,,,,
0x2a0,,DIV_RESULT,64,rw,CP,volatile,,,,,,
0x2a0,,DIV_RESULT_L,32,rw,CP,volatile,,,,,,
0x2a4,,DIV_RESULT_H,32,rw,CP,volatile,,,,,,
0x2a8,,DIVREM_RESULT,64,rw,CP,volatile,,,,,,
0x2a8,,DIVREM_RESULT_L,32,rw,CP,volatile,,,,,,
0x2ac,,DIVREM_RESULT_H,32,rw,CP,volatile,,,,,,
0x2b0,,SQRTCNT,16,rw,CP,volatile,BUSY,15,1,MODE,0,1
0x2b4,,SQRT_RESULT,32,rw,CP,volatile,,,,,,
#以下のSQRT_PARAM は、64ビットアクセスのほかに _H と _L を作りました。,,,,,,,,,,,,
0x2b8,,SQRT_PARAM,64,rw,CP,volatile,,,,,,
0x2b8,,SQRT_PARAM_L,32,rw,CP,volatile,,,,,,
0x2bc,,SQRT_PARAM_H,32,rw,CP,volatile,,,,,,
#PAUSE page 19-43,,,,,,,,,,,,
0x300,,PAUSE,16,rw,OS,volatile,MOD,14,2,CHK,0,1
#パワーコントロール nitro p35,,,,,,,,,,,,
0x304,,POWCNT,16,rw,GX,volatile,GE,3,1,RE,2,1,E2DG,1,1,LCD,0,1,LCDB,8,1,E2DGB,9,1,DSEL,15,1
#レンダリング済みライン数カウントレジスタ p174,,,,,,,,,,,,,,,,,,,,,,,,
0x320,,RDLINES_COUNT,16,r,G3X,volatile,RENDERED_LINES_MIN,0,6,,,,,,,,,,,,,,,
#エッジカラーレジスタ nitro p170 (このフィールド名称考慮すべき),,,,,,,,,,,,,,,,,,,,,,,,
#重複定義ありです。,,,,,,,,,,,,,,,,,,,,,,,,
0x330,,EDGE_COLOR_0,32,w,G3X,volatile,BLUE1,26,5,GREEN1,21,5,RED1,16,5,BLUE0,10,5,GREEN0,5,5,RED0,0,5
0x330,,EDGE_COLOR_0_L,16,w,G3X,volatile,BLUE0,10,5,GREEN0,5,5,RED0,0,5,,,,,,,,,
0x332,,EDGE_COLOR_0_H,16,w,G3X,volatile,BLUE1,10,5,GREEN1,5,5,RED1,0,5,,,,,,,,,
0x334,,EDGE_COLOR_1,32,w,G3X,volatile,BLUE3,26,5,GREEN3,21,5,RED3,16,5,BLUE2,10,5,GREEN2,5,5,RED2,0,5
0x334,,EDGE_COLOR_1_L,16,w,G3X,volatile,BLUE2,10,5,GREEN2,5,5,RED2,0,5,,,,,,,,,
0x336,,EDGE_COLOR_1_H,16,w,G3X,volatile,BLUE3,10,5,GREEN3,5,5,RED3,0,5,,,,,,,,,
0x338,,EDGE_COLOR_2,32,w,G3X,volatile,BLUE5,26,5,GREEN5,21,5,RED5,16,5,BLUE4,10,5,GREEN4,5,5,RED4,0,5
0x338,,EDGE_COLOR_2_L,16,w,G3X,volatile,BLUE4,10,5,GREEN4,5,5,RED4,0,5,,,,,,,,,
0x33a,,EDGE_COLOR_2_H,16,w,G3X,volatile,BLUE5,10,5,GREEN5,5,5,RED5,0,5,,,,,,,,,
0x33c,,EDGE_COLOR_3,32,w,G3X,volatile,BLUE7,26,5,GREEN7,21,5,RED7,16,5,BLUE6,10,5,GREEN6,5,5,RED6,0,5
0x33c,,EDGE_COLOR_3_L,16,w,G3X,volatile,BLUE6,10,5,GREEN6,5,5,RED6,0,5,,,,,,,,,
#レンダリング済みライン数カウントレジスタ p174,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x320,,RDLINES_COUNT,16,r,G3X,volatile,RENDERED_LINES_MIN,0,6,,,,,,,,,,,,,,,,,,
#エッジカラーレジスタ nitro p170 (このフィールド名称考慮すべき),,,,,,,,,,,,,,,,,,,,,,,,,,,
#重複定義ありです。,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x330,,EDGE_COLOR_0,32,w,G3X,volatile,BLUE1,26,5,GREEN1,21,5,RED1,16,5,BLUE0,10,5,GREEN0,5,5,RED0,0,5,,,
0x330,,EDGE_COLOR_0_L,16,w,G3X,volatile,BLUE0,10,5,GREEN0,5,5,RED0,0,5,,,,,,,,,,,,
0x332,,EDGE_COLOR_0_H,16,w,G3X,volatile,BLUE1,10,5,GREEN1,5,5,RED1,0,5,,,,,,,,,,,,
0x334,,EDGE_COLOR_1,32,w,G3X,volatile,BLUE3,26,5,GREEN3,21,5,RED3,16,5,BLUE2,10,5,GREEN2,5,5,RED2,0,5,,,
0x334,,EDGE_COLOR_1_L,16,w,G3X,volatile,BLUE2,10,5,GREEN2,5,5,RED2,0,5,,,,,,,,,,,,
0x336,,EDGE_COLOR_1_H,16,w,G3X,volatile,BLUE3,10,5,GREEN3,5,5,RED3,0,5,,,,,,,,,,,,
0x338,,EDGE_COLOR_2,32,w,G3X,volatile,BLUE5,26,5,GREEN5,21,5,RED5,16,5,BLUE4,10,5,GREEN4,5,5,RED4,0,5,,,
0x338,,EDGE_COLOR_2_L,16,w,G3X,volatile,BLUE4,10,5,GREEN4,5,5,RED4,0,5,,,,,,,,,,,,
0x33a,,EDGE_COLOR_2_H,16,w,G3X,volatile,BLUE5,10,5,GREEN5,5,5,RED5,0,5,,,,,,,,,,,,
0x33c,,EDGE_COLOR_3,32,w,G3X,volatile,BLUE7,26,5,GREEN7,21,5,RED7,16,5,BLUE6,10,5,GREEN6,5,5,RED6,0,5,,,
0x33c,,EDGE_COLOR_3_L,16,w,G3X,volatile,BLUE6,10,5,GREEN6,5,5,RED6,0,5,,,,,,,,,,,,
0x33e,,EDGE_COLOR_3_H,16,w,G3X,volatile,BLUE7,10,5,GREEN7,5,5,RED7,0,5,,,,,,,,,
#アルファテスト nitro p169,,,,,,,,,,,,,,,,,,,,,,,,
0x340,,ALPHA_TEST_REF,16,w,G3X,volatile,ALPHA_REFERENCE,0,5,,,,,,,,,,,,,,,
@ -253,7 +254,7 @@
0x360,,FOG_TABLE_0,32,w,G3X,volatile,DENSITY3,24,7,DENSITY2,16,7,DENSITY1,8,7,DENSITY0,0,7,,,,,,
0x360,,FOG_TABLE_0_L,16,w,G3X,volatile,DENSITY1,8,7,DENSITY0,0,7,,,,,,,,,,,,
0x362,,FOG_TABLE_0_H,16,w,G3X,volatile,DENSITY3,8,7,DENSITY2,0,7,,,,,,,,,,,,
0x364,,FOG_TABLE_1,32,w,G3X,volatile,DENSITY7,24,7,DENSITY6,16,7,DENSITY5,8,7,DENSITY4,0,7,,,,,,
0x364,,FOG_TABLE_1,32,w,G3X,volatile,DENSITY7,24,7,DENSITY6,16,7,DENSITY5,8,7,DENSITY4,0,7
0x364,,FOG_TABLE_1_L,16,w,G3X,volatile,DENSITY5,8,7,DENSITY4,0,7,,,,,,
0x366,,FOG_TABLE_1_H,16,w,G3X,volatile,DENSITY7,8,7,DENSITY6,0,7,,,,,,
0x368,,FOG_TABLE_2,32,w,G3X,volatile,DENSITY11,24,7,DENSITY10,16,7,DENSITY9,8,7,DENSITY8,0,7
@ -269,7 +270,7 @@
0x374,,FOG_TABLE_5_L,16,w,G3X,volatile,DENSITY21,8,7,DENSITY20,0,7,,,,,,
0x376,,FOG_TABLE_5_H,16,w,G3X,volatile,DENSITY23,8,7,DENSITY22,0,7,,,,,,
0x378,,FOG_TABLE_6,32,w,G3X,volatile,DENSITY27,24,7,DENSITY26,16,7,DENSITY25,8,7,DENSITY24,0,7
0x378,,FOG_TABLE_6_L,16,w,G3X,volatile,DENSITY25,8,7,DENSITY24,0,7,,,,,,
0x378,,FOG_TABLE_6_L,16,w,G3X,volatile,DENSITY25,8,7,DENSITY24,0,7,,,,,,,,,,,,
0x37a,,FOG_TABLE_6_H,16,w,G3X,volatile,DENSITY27,8,7,DENSITY26,0,7,,,,,,,,,,,,
0x37c,,FOG_TABLE_7,32,w,G3X,volatile,DENSITY31,24,7,DENSITY30,16,7,DENSITY29,8,7,DENSITY28,0,7,,,,,,
0x37c,,FOG_TABLE_7_L,16,w,G3X,volatile,DENSITY29,8,7,DENSITY28,0,7,,,,,,,,,,,,
@ -333,7 +334,7 @@
0x44c,,MTX_STORE,32,w,G3,volatile,INDEX,0,5,,,,,,,,,,,,,,,
0x450,,MTX_RESTORE,32,w,G3,volatile,INDEX,0,5,,,,,,,,,,,,,,,
0x454,,MTX_IDENTITY,32,w,G3,volatile,,,,,,,,,,,,,,,,,,
0x458,,MTX_LOAD_4x4,32,w,G3,volatile,S,31,1,INTEGER_M44,12,19,DECIMAL_M44,0,12,,,,,,,,,
0x458,,MTX_LOAD_4x4,32,w,G3,volatile,S,31,1,INTEGER_M44,12,19,DECIMAL_M44,0,12,,,,,,,,,,,,,,,,,,
0x45c,,MTX_LOAD_4x3,32,w,G3,volatile,S,31,1,INTEGER_M43,12,19,DECIMAL_M43,0,12,,,,,,,,,,,,,,,,,,
0x460,,MTX_MULT_4x4,32,w,G3,volatile,S,31,1,INTEGER_M44,12,19,DECIMAL_M44,0,12,,,,,,,,,,,,,,,,,,
0x464,,MTX_MULT_4x3,32,w,G3,volatile,S,31,1,INTEGER_M43,12,19,DECIMAL_M43,0,12,,,,,,,,,,,,,,,,,,
@ -349,7 +350,7 @@
0x48c,,VTX_16,32,w,G3,volatile,SY,31,1,INT_Y,28,3,DECIMAL_Y,16,12,SX,15,1,INT_X,12,3,DECIMAL_X,0,12,,,,,,,,,
0x490,,VTX_10,32,w,G3,volatile,SZ,29,1,INT_Z,26,3,DECIMAL_Z,20,6,SY,19,1,INT_Y,16,3,DECIMAL_Y,10,6,SX,9,1,INT_X,6,3,DECIMAL_X,0,6
0x494,,VTX_XY,32,w,G3,volatile,SY,31,1,INT_Y,28,3,DECIMAL_Y,16,12,SX,15,1,INT_X,12,3,DECIMAL_X,0,12,,,,,,,,,
0x498,,VTX_XZ,32,w,G3,volatile,SZ,31,1,INT_Z,28,3,DECIMAL_Z,16,12,SX,15,1,INT_X,12,3,DECIMAL_X,0,12,,,,,,,,,
0x498,,VTX_XZ,32,w,G3,volatile,SZ,31,1,INT_Z,28,3,DECIMAL_Z,16,12,SX,15,1,INT_X,12,3,DECIMAL_X,0,12,,,,,,,,,,,,,,,
0x49c,,VTX_YZ,32,w,G3,volatile,SZ,31,1,INT_Z,28,3,DECIMAL_Z,16,12,SY,15,1,INT_Y,12,3,DECIMAL_Y,0,12,,,,,,,,,,,,,,,
0x4a0,,VTX_DIFF,32,w,G3,volatile,SZ,29,1,DECIMAL_Z,20,9,SY,19,1,DECIMAL_Y,10,9,SX,9,1,DECIMAL_X,0,9,,,,,,,,,,,,,,,
#ポリゴン属性 nitro p130,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
@ -365,7 +366,7 @@
0x4d0,,SHININESS,32,w,G3,volatile,SHININESS3,24,8,SHININESS2,16,8,SHININESS1,8,8,SHININESS0,0,8,,,,,,,,,,,,,,,,,,,,,
#ポリゴン 頂点リストの開始と終了宣言 nitro p133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x500,,BEGIN_VTXS,32,w,G3,volatile,TYPE,0,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x504,,END_VTXS,32,w,G3,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x504,,END_VTXS,32,w,G3,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#レンダリングエンジン参照データスワップ nitro p115,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x540,,SWAP_BUFFERS,32,w,G3,volatile,DP,1,1,XS,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#ビューポート nitro p116,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
@ -381,7 +382,7 @@
#頂点RAMカウントレジスタ nitro p148,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x606,,VTXRAM_COUNT,16,r,G3X,volatile,VTXCNT,0,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#1ドットポリゴン表示境界デプス値レジスタ nitro p132,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x610,,DISP_1DOT_DEPTH,16,w,G3X,volatile,INTEGER_W,3,12,DECIMAL_W,0,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x610,,DISP_1DOT_DEPTH,16,w,G3X,volatile,INTEGER_W,3,12,DECIMAL_W,0,3,,,
#計算結果取得 nitro p145,,,,,,,,,,,,,,,
0x620,,POS_RESULT_X,32,r,G3X,volatile,SX,31,1,INTEGER_X,12,19,DECIMAL_X,0,12
0x624,,POS_RESULT_Y,32,r,G3X,volatile,SY,31,1,INTEGER_Y,12,19,DECIMAL_Y,0,12
@ -413,7 +414,7 @@
0x68c,,VECMTX_RESULT_3,32,r,G3X,volatile,S,31,1,INTEGER_m3,12,19,DECIMAL_m3,0,12
0x690,,VECMTX_RESULT_4,32,r,G3X,volatile,S,31,1,INTEGER_m4,12,19,DECIMAL_m4,0,12
0x694,,VECMTX_RESULT_5,32,r,G3X,volatile,S,31,1,INTEGER_m5,12,19,DECIMAL_m5,0,12
0x698,,VECMTX_RESULT_6,32,r,G3X,volatile,S,31,1,INTEGER_m6,12,19,DECIMAL_m6,0,12
0x698,,VECMTX_RESULT_6,32,r,G3X,volatile,S,31,1,INTEGER_m6,12,19,DECIMAL_m6,0,12,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x69c,,VECMTX_RESULT_7,32,r,G3X,volatile,S,31,1,INTEGER_m7,12,19,DECIMAL_m7,0,12,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x6a0,,VECMTX_RESULT_8,32,r,G3X,volatile,S,31,1,INTEGER_m8,12,19,DECIMAL_m8,0,12,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#2画面目関係レジスタ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
@ -429,7 +430,7 @@
0x1014,,DB_BG1OFS,32,w,G2S,volatile,VOFFSET,16,9,HOFFSET,0,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1014,,DB_BG1HOFS,16,w,G2S,volatile,OFFSET,0,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1016,,DB_BG1VOFS,16,w,G2S,volatile,OFFSET,0,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1018,,DB_BG2OFS,32,w,G2S,volatile,VOFFSET,16,9,HOFFSET,0,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1018,,DB_BG2OFS,32,w,G2S,volatile,VOFFSET,16,9,HOFFSET,0,9,,,
0x1018,,DB_BG2HOFS,16,w,G2S,volatile,OFFSET,0,9,,,,,,
0x101a,,DB_BG2VOFS,16,w,G2S,volatile,OFFSET,0,9,,,,,,
0x101c,,DB_BG3OFS,32,w,G2S,volatile,VOFFSET,16,9,HOFFSET,0,9,,,
@ -445,7 +446,7 @@
0x1032,,DB_BG3PB,16,w,G2S,volatile,S,15,1,INTEGER_DMX,8,7,DECIMAL_DMX,0,8
0x1034,,DB_BG3PC,16,w,G2S,volatile,S,15,1,INTEGER_DY,8,7,DECIMAL_DY,0,8
0x1036,,DB_BG3PD,16,w,G2S,volatile,S,15,1,INTEGER_DMY,8,7,DECIMAL_DMY,0,8
0x1038,,DB_BG3X,32,w,G2S,volatile,S,27,1,INTEGER_SX,8,19,DECIMAL_SX,0,8
0x1038,,DB_BG3X,32,w,G2S,volatile,S,27,1,INTEGER_SX,8,19,DECIMAL_SX,0,8,,,
0x103c,,DB_BG3Y,32,w,G2S,volatile,S,27,1,INTEGER_SY,8,19,DECIMAL_SY,0,8,,,
0x1040,,DB_WIN0H,16,w,G2S,volatile,LEFTX,8,8,RIGHTX,0,8,,,,,,
0x1042,,DB_WIN1H,16,w,G2S,volatile,LEFTX,8,8,RIGHTX,0,8,,,,,,

Can't render this file because it has a wrong number of fields in line 17.

View File

@ -158,30 +158,38 @@
0x138,,RCNT1,16,rw,EXI,volatile,DIR_RF,15,1,DIR_RE,14,1,DIR_RD,13,1,DIR_RC,12,1,DATA_RF,11,1,DATA_RE,10,1,DATA_RD,9,1,DATA_RC,8,1,DIR_RB,7,1,DIR_RA,6,1,DIR_R9,5,1,DIR_R8,4,1,DATA_RB,3,1,DATA_RA,2,1,DATA_R9,1,1,DATA_R8,0,1
#JOY,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x140,,JOYCNT,16,rw,EXI,volatile,MOD,7,1,I,6,1,SEND,2,1,RECV,1,1,RESET,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x150,,JOY_RECV,32,rw,EXI,volatile,RECVDATA,0,32,,,,,,,,,,,,,,,,,,,,,,,,
0x154,,JOY_TRANS,32,rw,EXI,volatile,SENDDATA,0,32,,,,,,,,,,,,,,,,,,,,,,,,
0x158,,JOY_STAT,16,rw,EXI,volatile,GEN,4,2,SSTATUS,3,1,RSTATUS,1,1,,,,,,,,,,,,,,,,,,
# ARM9 とのインターフェイス nitro p191 p192,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x180,,MAINPINTF,16,rw,PXI,volatile,I,14,1,IREQ,13,1,A7STATUS,8,4,A9STATUS,0,4,,,,,,,,,,,,,,,
0x184,,MAINP_FIFO_CNT,16,rw,PXI,volatile,E,15,1,ERR,14,1,RECV_RI,10,1,RECV_FULL,9,1,RECV_EMP,8,1,SEND_CL,3,1,SEND_TI,2,1,SEND_FULL,1,1,SEND_EMP,0,1
0x188,,SEND_FIFO,32,rw,PXI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x100000,,RECV_FIFO,32,rw,PXI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,
#メモリカード,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1a0,,MCCNT0,16,rw,MI,volatile,E,15,1,I,14,1,SEL,13,1,BUSY,7,1,MODE,6,1,BAUDRATE,0,2,,,,,,,,,
0x1a2,,MCD0,16,rw,MI,volatile,DATA,0,8,,,,,,,,,,,,,,,,,,,,,,,,
0x100010,,MCD1,32,rw,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1a4,,MCCNT1,32,rw,MI,volatile,START,31,1,WR,30,1,RESB,29,1,TRM,28,1,CT,27,1,PC,24,3,RDY,23,1,L2,16,6,L1,0,13
0x1a8,,MCCMD0,32,w,MI,volatile,CMD3,24,8,CMD2,16,8,CMD1,8,8,CMD0,0,8,,,,,,,,,,,,,,,
0x1ac,,MCCMD1,32,w,MI,volatile,CMD7,24,8,CMD6,16,8,CMD5,8,8,CMD4,0,8,,,,,,,,,,,,,,,
#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21a0,,MCCNT0_B,16,rw,MI,volatile,E,15,1,I,14,1,SEL,13,1,BUSY,7,1,MODE,6,1,BAUDRATE,0,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21a2,,MCD0_B,16,rw,MI,volatile,DATA,0,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x102010,,MCD1_B,32,rw,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21a4,,MCCNT1_B,32,rw,MI,volatile,START,31,1,WR,30,1,RESB,29,1,TRM,28,1,CT,27,1,PC,24,3,RDY,23,1,L2,16,6,L1,0,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21a8,,MCCMD0_B,32,w,MI,volatile,CMD3,24,8,CMD2,16,8,CMD1,8,8,CMD0,0,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21ac,,MCCMD1_B,32,w,MI,volatile,CMD7,24,8,CMD6,16,8,CMD5,8,8,CMD4,0,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# twl p220 p221,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1c0,,SPICNT,16,rw,SPI,volatile,E,15,1,I,14,1,MODE,11,1,CLKMODE,10,1,SEL,8,2,BUSY,7,1,BAUDRATE,0,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x150,,JOY_RECV,32,rw,EXI,volatile,RECVDATA,0,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x154,,JOY_TRANS,32,rw,EXI,volatile,SENDDATA,0,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x158,,JOY_STAT,16,rw,EXI,volatile,GEN,4,2,SSTATUS,3,1,RSTATUS,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# ARM9 とのインターフェイス nitro p191 p192,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x180,,MAINPINTF,16,rw,PXI,volatile,I,14,1,IREQ,13,1,A7STATUS,8,4,A9STATUS,0,4,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x184,,MAINP_FIFO_CNT,16,rw,PXI,volatile,E,15,1,ERR,14,1,RECV_RI,10,1,RECV_FULL,9,1,RECV_EMP,8,1,SEND_CL,3,1,SEND_TI,2,1,SEND_FULL,1,1,SEND_EMP,0,1,,,,,,,,,,,,
0x188,,SEND_FIFO,32,rw,PXI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x100000,,RECV_FIFO,32,rw,PXI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#メモリカード,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1a0,,MCCNT0,16,rw,MI,volatile,E,15,1,I,14,1,SEL,13,1,BUSY,7,1,MODE,6,1,BAUDRATE,0,2,,,,,,,,,,,,,,,,,,,,,
0x1a2,,MCD0,16,rw,MI,volatile,DATA,0,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x100010,,MCD1,32,rw,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1a4,,MCCNT1,32,rw,MI,volatile,START,31,1,WR,30,1,RESB,29,1,TRM,28,1,CT,27,1,PC,24,3,RDY,23,1,CSC,22,1,L2,16,6,SCR,15,1,SE,14,1,DSC,13,1,L1,0,13
0x1a8,,MCCMD0,32,w,MI,volatile,CMD3,24,8,CMD2,16,8,CMD1,8,8,CMD0,0,8,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1ac,,MCCMD1,32,w,MI,volatile,CMD7,24,8,CMD6,16,8,CMD5,8,8,CMD4,0,8,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1b0,,MCSCRA_L,32,w,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1b4,,MCSCRB_L,32,w,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1b8,,MCSCRA_H,8,w,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1ba,,MCSCRB_H,8,w,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21a0,,MCCNT0_B,16,rw,MI,volatile,E,15,1,I,14,1,SEL,13,1,BUSY,7,1,MODE,6,1,BAUDRATE,0,2,,,,,,,,,,,,,,,,,,,,,
0x21a2,,MCD0_B,16,rw,MI,volatile,DATA,0,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x102010,,MCD1_B,32,rw,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21a4,,MCCNT1_B,32,rw,MI,volatile,START,31,1,WR,30,1,RESB,29,1,TRM,28,1,CT,27,1,PC,24,3,RDY,23,1,CSC,22,1,L2,16,6,SCR,15,1,SE,14,1,DSC,13,1,L1,0,13
0x21a8,,MCCMD0_B,32,w,MI,volatile,CMD3,24,8,CMD2,16,8,CMD1,8,8,CMD0,0,8,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21ac,,MCCMD1_B,32,w,MI,volatile,CMD7,24,8,CMD6,16,8,CMD5,8,8,CMD4,0,8,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21b0,,MCSCRA_L_B,32,w,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21b4,,MCSCRB_L_B,32,w,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21b8,,MCSCRA_H_B,8,w,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21ba,,MCSCRB_H_B,8,w,MI,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# twl p220 p221,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x1c0,,SPICNT,16,rw,SPI,volatile,E,15,1,I,14,1,MODE,11,1,CLKMODE,10,1,SEL,8,2,BUSY,7,1,BAUDRATE,0,2,,,,,,,,,,,,,,,,,,
0x1c2,,SPID,16,rw,SPI,volatile,DATA,0,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#ŠO•”<E280A2><E2809D><EFBFBD><EFBFBD>Š nitro p19-26 / twl p223,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x204,,EXMEMCNT_L,16,rw,MI,volatile,EP,15,1,MP,11,1,MP_B,10,1,CP,7,1,PHI,5,2,ROM2nd,4,1,ROM1st,2,2,RAM,0,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
@ -190,30 +198,30 @@
0x208,,IME,16,rw,OS,volatile,IME,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x210,,IE,32,rw,OS,volatile,D7,31,1,D6,30,1,D5,29,1,D4,28,1,MI_B,27,1,MC_B,26,1,J_TX,25,1,WL,24,1,SPI,23,1,PM,22,1,J_RX,21,1,MI,20,1,MC,19,1,IFN,18,1,IFE,17,1,A7,16,1,MC_B_DET,15,1,MC_DET,14,1,I_D,13,1,K,12,1,D3,11,1,D2,10,1,D1,9,1,D0,8,1,T3,6,1,T2,5,1,T1,4,1,T0,3,1,VE,2,1,HB,1,1,VB,0,1
0x214,,IF,32,rw,OS,volatile,D7,31,1,D6,30,1,D5,29,1,D4,28,1,MI_B,27,1,MC_B,26,1,J_TX,25,1,SPI,23,1,PM,22,1,MI,20,1,J_RX,21,1,MC,19,1,IFN,18,1,IFE,17,1,A7,16,1,MC_B_DET,15,1,MC_DET,14,1,I_D,13,1,K,12,1,D3,11,1,D2,10,1,D1,9,1,D0,8,1,T3,6,1,T2,5,1,T1,4,1,T0,3,1,VE,2,1,HB,1,1,VB,0,1,,,
0x218,,IE2,32,rw,OS,volatile,MIC,14,1,I2C,13,1,AES,12,1,WSDIO,11,1,WSD,10,1,SDIO,9,1,SD,8,1,IO33_3,7,1,IO33_2,6,1,IO33_1,5,1,IO33_0,4,1,IO18_2,2,1,IO18_1,1,1,IO18_0,0,1
0x21c,,IF2,32,rw,OS,volatile,MIC,14,1,I2C,13,1,AES,12,1,WSDIO,11,1,WSD,10,1,SDIO,9,1,SD,8,1,IO33_3,7,1,IO33_2,6,1,IO33_1,5,1,IO33_0,4,1,IO18_2,2,1,IO18_1,1,1,IO18_0,0,1
#本体内メモリ nitro p194,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x240,,WVRAMSTAT,16,rw,MI,volatile,WRAM_1,9,1,WRAM_0,8,1,VRAM_D,1,1,VRAM_C,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#PAUSE page 19-43,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x300,,PAUSE,16,rw,OS,volatile,MOD,14,2,CHK,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#パワーコントロール nitro p200,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x304,,POWCNT,16,rw,SND,volatile,EWL,1,1,SPE,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x308,,PROT,16,rw,CFG,volatile,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#サウンド,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x400,,SOUND0CNT,32,rw,SND,volatile,E,31,1,FORMAT,29,2,REPEAT,27,2,DUTY,24,3,PAN,16,7,HOLD,15,1,SHIFT,8,2,VOLUME,0,7,,,,,,,,,,,,,,,,,,
0x400,,SOUND0CNT_VOL_16,16,rw,SND,volatile,HOLD,15,1,SHIFT,8,2,VOLUME,0,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x400,,SOUND0CNT_VOL,8,rw,SND,volatile,VOLUME,0,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x402,,SOUND0CNT_PAN,8,rw,SND,volatile,PAN,0,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x403,,SOUND0CNT_8,8,rw,SND,volatile,E,7,1,FORMAT,5,2,REPEAT,3,2,DUTY,0,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x404,,SOUND0SAD,32,w,SND,volatile,SRC,0,27,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x408,,SOUND0TMR,16,w,SND,volatile,TIMER,0,16,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x40a,,SOUND0RPT_PT,16,w,SND,volatile,POINT,0,16,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x40c,,SOUND0RPT_LEN,32,w,SND,volatile,LEN,0,22,,,,,,,,,,,,,,,,,,,,,,,,,,,
#サウンドマスターコントロール nitro p201,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x500,,SOUNDCNT,16,rw,SND,volatile,E,15,1,MIX_CH3,13,1,MIX_CH1,12,1,ROUT,10,2,LOUT,8,2,VOLUME,0,7,,,,,,,,,,,,
0x501,,SOUNDCNT_8,8,rw,SND,volatile,E,7,1,MIX_CH3,5,1,MIX_CH1,4,1,ROUT,2,2,LOUT,0,2,,,,,,,,,,,,,,,
0x500,,SOUNDCNT_VOL,8,rw,SND,volatile,VOLUME,0,7,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x504,,PWMBIAS,16,rw,SND,volatile,BIAS,0,10,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x218,,IE2,32,rw,OS,volatile,MIC,14,1,I2C,13,1,AES,12,1,WSDIO,11,1,WSD,10,1,SDIO,9,1,SD,8,1,IO33_3,7,1,IO33_2,6,1,IO33_1,5,1,IO33_0,4,1,IO18_2,2,1,IO18_1,1,1,IO18_0,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x21c,,IF2,32,rw,OS,volatile,MIC,14,1,I2C,13,1,AES,12,1,WSDIO,11,1,WSD,10,1,SDIO,9,1,SD,8,1,IO33_3,7,1,IO33_2,6,1,IO33_1,5,1,IO33_0,4,1,IO18_2,2,1,IO18_1,1,1,IO18_0,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#本体内メモリ nitro p194,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x240,,WVRAMSTAT,16,rw,MI,volatile,WRAM_1,9,1,WRAM_0,8,1,VRAM_D,1,1,VRAM_C,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#PAUSE page 19-43,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x300,,PAUSE,16,rw,OS,volatile,MOD,14,2,CHK,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#パワーコントロール nitro p200,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x304,,POWCNT,16,rw,SND,volatile,EWL,1,1,SPE,0,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x308,,PROT,16,rw,CFG,volatile,,,,,,,,,,,,,,,,,,,,,,,,
#サウンド,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x400,,SOUND0CNT,32,rw,SND,volatile,E,31,1,FORMAT,29,2,REPEAT,27,2,DUTY,24,3,PAN,16,7,HOLD,15,1,SHIFT,8,2,VOLUME,0,7
0x400,,SOUND0CNT_VOL_16,16,rw,SND,volatile,HOLD,15,1,SHIFT,8,2,VOLUME,0,7,,,,,,,,,,,,,,,
0x400,,SOUND0CNT_VOL,8,rw,SND,volatile,VOLUME,0,7,,,,,,,,,,,,,,,,,,,,,
0x402,,SOUND0CNT_PAN,8,rw,SND,volatile,PAN,0,7,,,,,,,,,,,,,,,,,,,,,
0x403,,SOUND0CNT_8,8,rw,SND,volatile,E,7,1,FORMAT,5,2,REPEAT,3,2,DUTY,0,3,,,,,,,,,,,,
0x404,,SOUND0SAD,32,w,SND,volatile,SRC,0,27,,,,,,,,,,,,,,,,,,,,,
0x408,,SOUND0TMR,16,w,SND,volatile,TIMER,0,16,,,,,,,,,,,,,,,,,,,,,
0x40a,,SOUND0RPT_PT,16,w,SND,volatile,POINT,0,16,,,,,,,,,,,,,,,,,,,,,
0x40c,,SOUND0RPT_LEN,32,w,SND,volatile,LEN,0,22,,,,,,,,,,,,,,,,,,,,,
#サウンドマスターコントロール nitro p201,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x500,,SOUNDCNT,16,rw,SND,volatile,E,15,1,MIX_CH3,13,1,MIX_CH1,12,1,ROUT,10,2,LOUT,8,2,VOLUME,0,7,,,,,,
0x501,,SOUNDCNT_8,8,rw,SND,volatile,E,7,1,MIX_CH3,5,1,MIX_CH1,4,1,ROUT,2,2,LOUT,0,2,,,,,,,,,
0x500,,SOUNDCNT_VOL,8,rw,SND,volatile,VOLUME,0,7,,,,,,,,,,,,,,,,,,,,,
0x504,,PWMBIAS,16,rw,SND,volatile,BIAS,0,10,,,,,,,,,,,,,,,,,,,,,
#<23>L<EFBFBD><4C><EFBFBD>v<EFBFBD>`<60><> nitro p206,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0x508,,SNDCAPCNT,16,rw,SND,volatile,CAP1_E,15,1,CAP1_FORMAT,11,1,CAP1_REPEAT,10,1,CAP1_IN,9,1,CAP1_OUT,8,1,CAP0_E,7,1,CAP0_FORMAT,3,1,CAP0_REPEAT,2,1,CAP0_IN,1,1,CAP0_OUT,0,1
0x508,,SNDCAP0CNT,8,rw,SND,volatile,E,7,1,FORMAT,3,1,REPEAT,2,1,IN,1,1,OUT,0,1,,,,,,,,,,,,,,,

Can't render this file because it has a wrong number of fields in line 17.

View File

@ -16,33 +16,80 @@
#include <twl/mi.h>
static u32 intervalTable[] =
static u16 intervalTable[] =
{
1, 1, 1, 1,
};
static MIExDmaPrescaler prescaleTable[] =
{
MI_EXDMA_PRESCALER_1,
MI_EXDMA_PRESCALER_1,
MI_EXDMA_PRESCALER_1,
MI_EXDMA_PRESCALER_1,
};
//================================================================================
// memory oparation using DMA (sync)
//================================================================================
/*---------------------------------------------------------------------------*
Name: MIi_SetExDmaArbiter
Name: MIi_SetExDmaArbitration
Description: set DMA arbitration
Arguments: arb : arbitration algorism
yld : yield cycles for round robin
Returns: None
*---------------------------------------------------------------------------*/
void MIi_SetExDmaArbiter( MIExDmaArbitration arb, MIExDmaYieldCycles yld )
void MIi_SetExDmaArbitration( MIExDmaArbitration arb )
{
OSIntrMode enabled = OS_DisableInterrupts();
reg_MI_DMAGBL = (u32)(arb | yld);
reg_MI_DMAGBL = (u32)arb | (reg_MI_DMAGBL & ~REG_MI_DMAGBL_ARB_MASK);
(void)OS_RestoreInterrupts(enabled);
}
/*---------------------------------------------------------------------------*
Name: MIi_SetExDmaYieldCycles
Description: set DMA yield cycles
Arguments: yld : yield cycles for round robin
Returns: None
*---------------------------------------------------------------------------*/
void MIi_SetExDmaYieldCycles( MIExDmaYieldCycles yld )
{
OSIntrMode enabled = OS_DisableInterrupts();
reg_MI_DMAGBL = (u32)yld | (reg_MI_DMAGBL & ~REG_MI_DMAGBL_YLD_MASK);
(void)OS_RestoreInterrupts(enabled);
}
/*---------------------------------------------------------------------------*
Name: MIi_SetExDmaInterval
Description: set DMA interval
Arguments: dmaNo : DMA channel No.
count : count
prescale : prescale
Returns: None
*---------------------------------------------------------------------------*/
void MIi_SetExDmaInterval( u32 dmaNo, u16 count, MIExDmaPrescaler prescale )
{
u32 idx = dmaNo - MI_EXDMA_CH_MIN;
if ( idx < MI_EXDMA_CH_NUM )
{
intervalTable[idx] = count;
prescaleTable[idx] = prescale;
}
}
/*---------------------------------------------------------------------------*
Name: MIi_ExDmaFill
@ -63,7 +110,7 @@ void MIi_ExDmaFill( u32 dmaNo, void *dest, u32 data, u32 size )
{
MIExDmaBlockSize blockSize = MI_EXDMA_BLOCK_32B;
u32 interval = intervalTable[idx];
MIExDmaPrescaler prescale = MI_EXDMA_PRESCALER_1;
MIExDmaPrescaler prescale = prescaleTable[idx];
MIi_ExDmaFillCore( dmaNo, dest, data, size, size,
blockSize, interval, prescale,
@ -92,7 +139,7 @@ void MIi_ExDmaCopy( u32 dmaNo, const void *src, void *dest, u32 size )
{
MIExDmaBlockSize blockSize = MI_EXDMA_BLOCK_32B;
u32 interval = intervalTable[idx];
MIExDmaPrescaler prescale = MI_EXDMA_PRESCALER_1;
MIExDmaPrescaler prescale = prescaleTable[idx];
MIi_ExDmaCopyCore( dmaNo, src, dest, size, size,
blockSize, interval, prescale,
@ -121,7 +168,7 @@ void MIi_ExDmaSend( u32 dmaNo, const void *src, void *dest, u32 size )
{
MIExDmaBlockSize blockSize = MI_EXDMA_BLOCK_32B;
u32 interval = intervalTable[idx];
MIExDmaPrescaler prescale = MI_EXDMA_PRESCALER_1;
MIExDmaPrescaler prescale = prescaleTable[idx];
MIi_ExDmaSendCore( dmaNo, src, dest, size, size,
blockSize, interval, prescale,
@ -150,7 +197,7 @@ void MIi_ExDmaRecv( u32 dmaNo, const void *src, void *dest, u32 size )
{
MIExDmaBlockSize blockSize = MI_EXDMA_BLOCK_32B;
u32 interval = intervalTable[idx];
MIExDmaPrescaler prescale = MI_EXDMA_PRESCALER_1;
MIExDmaPrescaler prescale = prescaleTable[idx];
MIi_ExDmaRecvCore( dmaNo, src, dest, size, size,
blockSize, interval, prescale,
@ -179,7 +226,7 @@ void MIi_ExDmaFillAsync( u32 dmaNo, void *dest, u32 data, u32 size )
{
MIExDmaBlockSize blockSize = MI_EXDMA_BLOCK_32B;
u32 interval = intervalTable[idx];
MIExDmaPrescaler prescale = MI_EXDMA_PRESCALER_1;
MIExDmaPrescaler prescale = prescaleTable[idx];
MIi_ExDmaFillAsyncCore( dmaNo, dest, data, size, size,
blockSize, interval, prescale,
@ -208,7 +255,7 @@ void MIi_ExDmaCopyAsync( u32 dmaNo, const void *src, void *dest, u32 size )
{
MIExDmaBlockSize blockSize = MI_EXDMA_BLOCK_32B;
u32 interval = intervalTable[idx];
MIExDmaPrescaler prescale = MI_EXDMA_PRESCALER_1;
MIExDmaPrescaler prescale = prescaleTable[idx];
MIi_ExDmaCopyAsyncCore( dmaNo, src, dest, size, size,
blockSize, interval, prescale,
@ -237,7 +284,7 @@ void MIi_ExDmaSendAsync( u32 dmaNo, const void *src, void *dest, u32 size )
{
MIExDmaBlockSize blockSize = MI_EXDMA_BLOCK_32B;
u32 interval = intervalTable[idx];
MIExDmaPrescaler prescale = MI_EXDMA_PRESCALER_1;
MIExDmaPrescaler prescale = prescaleTable[idx];
MIi_ExDmaSendAsyncCore( dmaNo, src, dest, size, size,
blockSize, interval, prescale,
@ -266,7 +313,7 @@ void MIi_ExDmaRecvAsync( u32 dmaNo, const void *src, void *dest, u32 size )
{
MIExDmaBlockSize blockSize = MI_EXDMA_BLOCK_32B;
u32 interval = intervalTable[idx];
MIExDmaPrescaler prescale = MI_EXDMA_PRESCALER_1;
MIExDmaPrescaler prescale = prescaleTable[idx];
MIi_ExDmaRecvAsyncCore( dmaNo, src, dest, size, size,
blockSize, interval, prescale,
@ -588,11 +635,14 @@ BOOL MIi_IsExDmaBusy( u32 dmaNo )
{
u32 idx = dmaNo - MI_EXDMA_CH_MIN;
if ( idx < MI_EXDMA_CH_NUM )
{
MIExDmaChanRegs *reg = &((MIExDmaChanRegs*)REG_DMA4SAD_ADDR)[idx];
return (BOOL)((reg->ctrl & REG_MI_DMA4CNT_E_MASK) >> REG_MI_DMA4CNT_E_SHIFT);
}
return FALSE;
}
/*---------------------------------------------------------------------------*
@ -608,6 +658,7 @@ void MIi_WaitExDma( u32 dmaNo )
{
u32 idx = dmaNo - MI_EXDMA_CH_MIN;
if ( idx < MI_EXDMA_CH_NUM )
{
MIExDmaChanRegs *reg = &((MIExDmaChanRegs*)REG_DMA4SAD_ADDR)[idx];

View File

@ -37,6 +37,9 @@
void MI_Init(void)
{
#ifdef SDK_ARM9
//---- Init Main Memory Priority
MI_SetMainMemoryPriority(MI_PROCESSOR_ARM7);
//---- Init Work RAM (allocate both wram (block0/1) to ARM7)
MI_SetWramBank(MI_WRAM_ARM7_ALL);
#endif
@ -47,5 +50,6 @@ void MI_Init(void)
//---- add for TWL
//---- DMA arbitration
MIi_SetExDmaArbiter( MI_EXDMAGBL_ARB_ROUND_ROBIN, MI_EXDMAGBL_YLD_CYCLE_DEFAULT );
MIi_SetExDmaArbitration( MI_EXDMAGBL_ARB_ROUND_ROBIN );
MIi_SetExDmaYieldCycles( MI_EXDMAGBL_YLD_CYCLE_DEFAULT );
}

View File

@ -25,6 +25,7 @@ SUBDIRS = \
ifneq ($(TWL_PLATFORM),DSTEG)
SUBDIRS += \
exDma-1 \
allDma-1 \
endif

View File

@ -0,0 +1,44 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - OS - demos - allDma-1
# File: Makefile
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded instructions, statements, and computer programs contain
# proprietary information of Nintendo of America Inc. and/or Nintendo
# Company Ltd., and are protected by Federal copyright law. They may
# not be disclosed to third parties or copied or duplicated in any form,
# in whole or in part, without the prior written consent of Nintendo.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
SUBDIRS =
#----------------------------------------------------------------------------
#TWL_CODEGEN = THUMB
TWL_PROC = ARM7
TARGET_BIN = allDma7_1.axf
SRCS = main.c
#SRCDIR = # using default
#LCFILE = # using default
include $(TWLSDK_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,694 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - MI - demos - allDma-1
File: main.c
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Log: $
$NoKeywords: $
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <../build/libraries/mi/common/include/mi_dma.h>
#define MY_DMA_MMEM ((t_TestBuf *)HW_MAIN_MEM_SUB)
#define MY_TEST_LOOPS (sizeof(copyfillArg)/sizeof(t_CommonArg))
#define ONE_BUF_SIZE 0x1004
#define MY_DMA_CH_START 1
#define MY_DMA_CH_END 7
typedef struct
{
u32 prePad __attribute__ ((aligned (32)));
u16 src[8][ONE_BUF_SIZE/2] __attribute__ ((aligned (32)));
u16 dest[8][ONE_BUF_SIZE/2] __attribute__ ((aligned (32)));
u32 PostPad __attribute__ ((aligned (32)));
}
t_TestBuf;
typedef struct
{
u16 (*src)[ONE_BUF_SIZE/2];
u16 (*dest)[ONE_BUF_SIZE/2];
char *copyStr;
char *fillStr;
}
t_CommonArg;
t_TestBuf testBuf __attribute__ ((aligned (32)));
t_CommonArg copyfillArg[] =
{
{ testBuf.src, testBuf.dest, "DmaCopy success on WRAM -> WRAM.\n", NULL, },
{ MY_DMA_MMEM->src, testBuf.dest, "DmaCopy success on MAIN_MEM -> WRAM.\n", "DmaFill success on WRAM.\n", },
{ testBuf.src, MY_DMA_MMEM->dest, "DmaCopy success on WRAM -> MAIN_MEM.\n", NULL, },
{ MY_DMA_MMEM->src, MY_DMA_MMEM->dest, "DmaCopy success on MAIN_MEM -> MAIN_MEM.\n", "DmaFill success on MAIN_MEM.\n", },
};
t_CommonArg stopArg[] =
{
{ testBuf.src, testBuf.dest, "Stopping DmaCopy success on WRAM -> WRAM.\n", NULL, },
{ MY_DMA_MMEM->src, testBuf.dest, "Stopping DmaCopy success on MAIN_MEM -> WRAM.\n", "Stopping DmaFill success on WRAM.\n", },
{ testBuf.src, MY_DMA_MMEM->dest, "Stopping DmaCopy success on WRAM -> MAIN_MEM.\n", NULL, },
{ MY_DMA_MMEM->src, MY_DMA_MMEM->dest, "Stopping DmaCopy success on MAIN_MEM -> MAIN_MEM.\n", "Stopping DmaFill success on MAIN_MEM.\n", },
};
t_CommonArg copyfillAsyncArg[] =
{
{ testBuf.src, testBuf.dest, "DmaCopyAsync success on WRAM -> WRAM.\n", NULL, },
{ MY_DMA_MMEM->src, testBuf.dest, "DmaCopyAsync success on MAIN_MEM -> WRAM.\n", "DmaFillAsync success on WRAM.\n", },
{ testBuf.src, MY_DMA_MMEM->dest, "DmaCopyAsync success on WRAM -> MAIN_MEM.\n", NULL, },
{ MY_DMA_MMEM->src, MY_DMA_MMEM->dest, "DmaCopyAsync success on MAIN_MEM -> MAIN_MEM.\n", "DmaFillAsync success on MAIN_MEM.\n", },
};
u32 exDmaIntrCount[MI_EXDMA_CH_NUM];
void InitExDmaIntr(void);
void ClearIntrCount(void);
void PrintIntrCount(void);
void ExDma4Intr(void);
void ExDma5Intr(void);
void ExDma6Intr(void);
void ExDma7Intr(void);
static BOOL CheckDmaCopy( u32 dmaNo, void *src, void *dest, const char *str )
{
BOOL ercd = TRUE;
u8 *s = src;
u8 *d = dest;
int i;
for (i=0; i<ONE_BUF_SIZE; i++)
{
if ( s[i] != d[i] )
{
OS_TPrintf( "error: DmaCopy failed address = 0x%x count = 0x%x dmaNo = %d.\n", &d[i], i/2, dmaNo );
OS_TPrintf( " src = 0x%02x dest = 0x%02x.\n", s[i], d[i] );
ercd = FALSE;
break;
}
}
if (str)
{
OS_TPrintf( str );
}
return ercd;
}
static BOOL CheckDmaFill( u32 dmaNo, void *dest, u32 data, char *str )
{
BOOL ercd = TRUE;
u32 *d = dest;
int i;
for (i=0; i<ONE_BUF_SIZE/4; i++)
{
if ( data != d[i] )
{
OS_TPrintf( "error: DmaFill failed address = 0x%x count = 0x%x dmaNo = %d.\n", &d[i], i/2, dmaNo );
OS_TPrintf( " data = 0x%08x dest = 0x%08x.\n", data, d[i] );
ercd = FALSE;
break;
}
}
if (str)
{
OS_TPrintf( str );
}
return ercd;
}
static BOOL CheckDmaCopyAndFill( t_CommonArg *arg, u32 data )
{
u16 (*src)[ONE_BUF_SIZE/2] = arg->src;
u16 (*dest)[ONE_BUF_SIZE/2] = arg->dest;
char *copyStr = arg->copyStr;
char *fillStr = arg->fillStr;
BOOL c_ercd = TRUE, f_ercd = TRUE;
u32 i, ii;
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
for (ii=0; ii<ONE_BUF_SIZE/2; ii++)
{
src[i][ii] = (u16)(ii+i-data);
}
}
if ( copyStr )
{
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
u16 *s = src[i];
u16 *d = dest[i];
char *str = NULL;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_ExDmaCopy( ch, s, d, ONE_BUF_SIZE );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MI_DmaCopy32( ch, s, d, ONE_BUF_SIZE );
}
if ( i == MY_DMA_CH_START )
{
str = copyStr;
}
c_ercd |= CheckDmaCopy( ch, s, d, str );
}
}
if ( fillStr )
{
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
u16 *d = dest[i];
char *str = NULL;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_ExDmaFill( ch, d, data+i, ONE_BUF_SIZE );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MI_DmaFill32( ch, d, data+i, ONE_BUF_SIZE );
}
if ( i == MY_DMA_CH_START )
{
str = fillStr;
}
f_ercd |= CheckDmaFill( ch, d, data+i, str );
}
}
return c_ercd | f_ercd;
}
static BOOL CheckDmaCopyAndFillAsync( t_CommonArg *arg, u32 data )
{
u16 (*src)[ONE_BUF_SIZE/2] = arg->src;
u16 (*dest)[ONE_BUF_SIZE/2] = arg->dest;
char *copyStr = arg->copyStr;
char *fillStr = arg->fillStr;
BOOL c_ercd = TRUE, f_ercd = TRUE;
u32 i, ii;
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
for (ii=0; ii<ONE_BUF_SIZE/2; ii++)
{
src[i][ii] = (u16)(ii+i-data);
}
}
if ( copyStr )
{
while ( GX_GetVCount() != 189 )
{
}
while ( GX_GetVCount() != 190 )
{
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
u16 *s = src[i];
u16 *d = dest[i];
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_ExDmaCopyAsync( ch, s, d, ONE_BUF_SIZE );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MIi_DmaSetParams(ch, (u32)s, (u32)d, MI_CNT_VBCOPY32(ONE_BUF_SIZE) & ~MI_DMA_CONTINUOUS_ON);
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
BOOL bool = FALSE;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
bool = MIi_IsExDmaBusy( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
bool = MI_IsDmaBusy( ch );
}
if ( bool == FALSE )
{
OS_TPrintf( "warning: DmaCopyAsync isn't busy dmaNo = %d.\n", ch );
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_WaitExDma( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MI_WaitDma( ch );
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
u16 *s = src[i];
u16 *d = dest[i];
char *str = NULL;
if ( i == MY_DMA_CH_START )
{
str = copyStr;
}
c_ercd |= CheckDmaCopy( ch, s, d, str );
}
}
if ( fillStr )
{
while ( GX_GetVCount() != 190 )
{
}
while ( GX_GetVCount() != 191 )
{
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
u16 *d = dest[i];
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_ExDmaFillAsync( ch, d, data+i, ONE_BUF_SIZE );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MIi_DmaSetParams_src32(ch, data+i, (u32)d, (MI_CNT_VBCOPY32(ONE_BUF_SIZE) & ~MI_DMA_CONTINUOUS_ON) | MI_DMA_SRC_FIX);
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
BOOL bool = FALSE;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
bool = MIi_IsExDmaBusy( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
bool = MI_IsDmaBusy( ch );
}
if ( bool == FALSE )
{
OS_TPrintf( "warning: DmaFillAsync isn't busy dmaNo = %d.\n", ch );
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_WaitExDma( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MI_WaitDma( ch );
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
u16 *d = dest[i];
char *str = NULL;
if ( i == MY_DMA_CH_START )
{
str = fillStr;
}
f_ercd |= CheckDmaFill( ch, d, data+i, str );
}
}
return c_ercd | f_ercd;
}
static BOOL CheckDmaStop( t_CommonArg *arg )
{
u16 (*src)[ONE_BUF_SIZE/2] = arg->src;
u16 (*dest)[ONE_BUF_SIZE/2] = arg->dest;
char *copyStr = arg->copyStr;
char *fillStr = arg->fillStr;
BOOL c_ercd = TRUE, f_ercd = TRUE;
u32 i;
if ( copyStr )
{
while ( GX_GetVCount() != 189 )
{
}
while ( GX_GetVCount() != 190 )
{
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
u16 *s = src[i];
u16 *d = dest[i];
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_ExDmaCopyAsync( ch, s, d, ONE_BUF_SIZE );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MIi_DmaSetParams(ch, (u32)s, (u32)d, MI_CNT_VBCOPY32(ONE_BUF_SIZE) & ~MI_DMA_CONTINUOUS_ON);
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
BOOL bool = FALSE;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
bool = MIi_IsExDmaBusy( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
bool = MI_IsDmaBusy( ch );
}
if ( bool == FALSE )
{
OS_TPrintf( "warning: DmaCopyAsync isn't busy dmaNo = %d.\n", ch );
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_StopExDma( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MI_StopDma( ch );
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
BOOL bool = FALSE;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
bool = MIi_IsExDmaBusy( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
bool = MI_IsDmaBusy( ch );
}
if ( bool == TRUE )
{
OS_TPrintf( "error: Stopping DmaCopy failed dmaNo = %d.\n", ch );
}
}
if ( c_ercd == TRUE && copyStr )
{
OS_TPrintf( copyStr );
}
}
if ( fillStr )
{
while ( GX_GetVCount() != 188 )
{
}
while ( GX_GetVCount() != 189 )
{
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
u16 *d = dest[i];
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_ExDmaFillAsync( ch, d, i, ONE_BUF_SIZE );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MIi_DmaSetParams_src32(ch, i, (u32)d, (MI_CNT_VBCOPY32(ONE_BUF_SIZE) & ~MI_DMA_CONTINUOUS_ON) | MI_DMA_SRC_FIX);
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
BOOL bool = FALSE;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
bool = MIi_IsExDmaBusy( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
bool = MI_IsDmaBusy( ch );
}
if ( bool == FALSE )
{
OS_TPrintf( "warning: DmaFillAsync isn't busy dmaNo = %d.\n", ch );
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_StopExDma( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MI_StopDma( ch );
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
BOOL bool = FALSE;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
bool = MIi_IsExDmaBusy( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
bool = MI_IsDmaBusy( ch );
}
if ( bool == TRUE )
{
OS_TPrintf( "error: Stopping DmaFill failed dmaNo = %d.\n", ch );
}
}
if ( f_ercd == TRUE && fillStr )
{
OS_TPrintf( fillStr );
}
}
return c_ercd | f_ercd;
}
static void TestDmaFuncs( void )
{
u32 i;
ClearIntrCount();
// sync copy and fill test
OS_TPrintf( "\nChecking DmaCopy and DmaFill ....\n" );
for (i=0; i<MY_TEST_LOOPS; i++)
{
(void)CheckDmaCopyAndFill( &copyfillArg[i], i );
}
// async copy and fill test
OS_TPrintf( "\nChecking DmaCopyAsync and DmaFillAsync ....\n" );
for (i=0; i<MY_TEST_LOOPS; i++)
{
(void)CheckDmaCopyAndFillAsync( &copyfillAsyncArg[i], i );
}
// stop test
OS_TPrintf( "\nChecking DmaStop ....\n" );
for (i=0; i<MY_TEST_LOOPS; i++)
{
(void)CheckDmaStop( &stopArg[i] );
}
PrintIntrCount();
}
//================================================================================
/*---------------------------------------------------------------------------*
Name: TwlMain
Description: main
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void TwlMain()
{
OS_Init();
InitExDmaIntr();
OS_TPrintf("\nARM7 starts.\n");
// priority dma test
OS_TPrintf( "\nTurn into Priority Mode.\n" );
MIi_SetExDmaArbitration( MI_EXDMAGBL_ARB_PRIORITY );
MIi_SetExDmaInterval( 4, 595, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 5, 580, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 6, 565, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 7, 550, MI_EXDMA_PRESCALER_1 );
TestDmaFuncs();
// round robin dma test
OS_TPrintf( "\nTurn into Round Robin Mode.\n" );
MIi_SetExDmaArbitration( MI_EXDMAGBL_ARB_ROUND_ROBIN );
MIi_SetExDmaYieldCycles( MI_EXDMAGBL_YLD_CYCLE_DEFAULT );
MIi_SetExDmaInterval( 4, 107, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 5, 105, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 6, 103, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 7, 101, MI_EXDMA_PRESCALER_1 );
TestDmaFuncs();
OS_TPrintf("\nARM7 ends.\n");
OS_Terminate();
}
/*---------------------------------------------------------------------------*
Name: InitExDmaIntr
Description: initialize extended dma interrupt handler
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void InitExDmaIntr(void)
{
(void)OS_SetIrqFunction( OS_IE_DMA4, ExDma4Intr );
(void)OS_SetIrqFunction( OS_IE_DMA5, ExDma5Intr );
(void)OS_SetIrqFunction( OS_IE_DMA6, ExDma6Intr );
(void)OS_SetIrqFunction( OS_IE_DMA7, ExDma7Intr );
(void)OS_EnableIrqMask( OS_IE_DMA4 | OS_IE_DMA5 | OS_IE_DMA6 | OS_IE_DMA7 );
(void)OS_EnableIrq();
}
/*---------------------------------------------------------------------------*
Name: ClearIntrCount
Description: clear interrupt counter
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void ClearIntrCount(void)
{
int i;
OS_ResetRequestIrqMask( OS_IE_DMA4 | OS_IE_DMA5 | OS_IE_DMA6 | OS_IE_DMA7 );
for (i=0; i<MI_EXDMA_CH_NUM; i++)
{
exDmaIntrCount[i] = 0;
}
}
/*---------------------------------------------------------------------------*
Name: PrintIntrCount
Description: print interrupt counter
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void PrintIntrCount(void)
{
OS_TPrintf( "\ninterrupt count: dma4 = %d, dma5 = %d, dma6 = %d, dma7 = %d.\n",
exDmaIntrCount[0], exDmaIntrCount[1], exDmaIntrCount[2], exDmaIntrCount[3]);
}
/*---------------------------------------------------------------------------*
Name: ExDmaIntr
Description: extended dma interrupt handler
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void ExDma4Intr(void)
{
u32 ofs = 4 - MI_EXDMA_CH_MIN;
exDmaIntrCount[ofs]++;
//---- check interrupt flag
OS_SetIrqCheckFlag( OS_IE_DMA4 );
}
void ExDma5Intr(void)
{
u32 ofs = 5 - MI_EXDMA_CH_MIN;
exDmaIntrCount[ofs]++;
//---- check interrupt flag
OS_SetIrqCheckFlag( OS_IE_DMA5 );
}
void ExDma6Intr(void)
{
u32 ofs = 6 - MI_EXDMA_CH_MIN;
exDmaIntrCount[ofs]++;
//---- check interrupt flag
OS_SetIrqCheckFlag( OS_IE_DMA6 );
}
void ExDma7Intr(void)
{
u32 ofs = 7 - MI_EXDMA_CH_MIN;
exDmaIntrCount[ofs]++;
//---- check interrupt flag
OS_SetIrqCheckFlag( OS_IE_DMA7 );
}
/*====== End of main.c ======*/

View File

@ -0,0 +1,42 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - OS - demos - allDma-1
# File: Makefile
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded instructions, statements, and computer programs contain
# proprietary information of Nintendo of America Inc. and/or Nintendo
# Company Ltd., and are protected by Federal copyright law. They may
# not be disclosed to third parties or copied or duplicated in any form,
# in whole or in part, without the prior written consent of Nintendo.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
SUBDIRS =
#----------------------------------------------------------------------------
TARGET_BIN = allDma9_1.axf
SRCS = main.c
#SRCDIR = # using default
#LCFILE = # using default
include $(TWLSDK_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,703 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - MI - demos - allDma-1
File: main.c
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Log: $
$NoKeywords: $
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <../build/libraries/mi/common/include/mi_dma.h>
#define MY_DMA_WRAM ((t_TestBuf *)HW_WRAM_1_END)
#define MY_TEST_LOOPS (sizeof(copyfillArg)/sizeof(t_CommonArg))
#define ONE_BUF_SIZE 0x2004
#define MY_DMA_CH_START 1
#define MY_DMA_CH_END 7
typedef struct
{
u32 prePad __attribute__ ((aligned (32)));
u16 src[8][ONE_BUF_SIZE/2] __attribute__ ((aligned (32)));
u16 dest[8][ONE_BUF_SIZE/2] __attribute__ ((aligned (32)));
u32 PostPad __attribute__ ((aligned (32)));
}
t_TestBuf;
typedef struct
{
u16 (*src)[ONE_BUF_SIZE/2];
u16 (*dest)[ONE_BUF_SIZE/2];
char *copyStr;
char *fillStr;
}
t_CommonArg;
t_TestBuf testBuf __attribute__ ((aligned (32)));
t_CommonArg copyfillArg[] =
{
{ testBuf.src, testBuf.dest, "DmaCopy success on MAIN_MEM -> MAIN_MEM.\n", NULL, },
{ MY_DMA_WRAM->src, testBuf.dest, "DmaCopy success on WRAM -> MAIN_MEM.\n", "DmaFill success on MAIN_MEM.\n", },
{ testBuf.src, MY_DMA_WRAM->dest, "DmaCopy success on MAIN_MEM -> WRAM.\n", NULL, },
{ MY_DMA_WRAM->src, MY_DMA_WRAM->dest, "DmaCopy success on WRAM -> WRAM.\n", "DmaFill success on WRAM.\n", },
};
t_CommonArg stopArg[] =
{
{ testBuf.src, testBuf.dest, "Stopping DmaCopy success on MAIN_MEM -> MAIN_MEM.\n", NULL, },
{ MY_DMA_WRAM->src, testBuf.dest, "Stopping DmaCopy success on WRAM -> MAIN_MEM.\n", "Stopping DmaFill success on MAIN_MEM.\n", },
{ testBuf.src, MY_DMA_WRAM->dest, "Stopping DmaCopy success on MAIN_MEM -> WRAM.\n", NULL, },
{ MY_DMA_WRAM->src, MY_DMA_WRAM->dest, "Stopping DmaCopy success on WRAM -> WRAM.\n", "Stopping DmaFill success on WRAM.\n", },
};
t_CommonArg copyfillAsyncArg[] =
{
{ testBuf.src, testBuf.dest, "DmaCopyAsync success on MAIN_MEM -> MAIN_MEM.\n", NULL, },
{ MY_DMA_WRAM->src, testBuf.dest, "DmaCopyAsync success on WRAM -> MAIN_MEM.\n", "DmaFillAsync success on MAIN_MEM.\n", },
{ testBuf.src, MY_DMA_WRAM->dest, "DmaCopyAsync success on MAIN_MEM -> WRAM.\n", NULL, },
{ MY_DMA_WRAM->src, MY_DMA_WRAM->dest, "DmaCopyAsync success on WRAM -> WRAM.\n", "DmaFillAsync success on WRAM.\n", },
};
u32 exDmaIntrCount[MI_EXDMA_CH_NUM];
void InitExDmaIntr(void);
void ClearIntrCount(void);
void PrintIntrCount(void);
void ExDma4Intr(void);
void ExDma5Intr(void);
void ExDma6Intr(void);
void ExDma7Intr(void);
static BOOL CheckDmaCopy( u32 dmaNo, void *src, void *dest, const char *str )
{
BOOL ercd = TRUE;
u8 *s = src;
u8 *d = dest;
int i;
for (i=0; i<ONE_BUF_SIZE; i++)
{
if ( s[i] != d[i] )
{
OS_TPrintf( "error: DmaCopy failed address = 0x%x count = 0x%x dmaNo = %d.\n", &d[i], i/2, dmaNo );
OS_TPrintf( " src = 0x%02x dest = 0x%02x.\n", s[i], d[i] );
ercd = FALSE;
break;
}
}
if (str)
{
OS_TPrintf( str );
}
return ercd;
}
static BOOL CheckDmaFill( u32 dmaNo, void *dest, u32 data, char *str )
{
BOOL ercd = TRUE;
u32 *d = dest;
int i;
for (i=0; i<ONE_BUF_SIZE/4; i++)
{
if ( data != d[i] )
{
OS_TPrintf( "error: DmaFill failed address = 0x%x count = 0x%x dmaNo = %d.\n", &d[i], i/2, dmaNo );
OS_TPrintf( " data = 0x%08x dest = 0x%08x.\n", data, d[i] );
ercd = FALSE;
break;
}
}
if (str)
{
OS_TPrintf( str );
}
return ercd;
}
static BOOL CheckDmaCopyAndFill( t_CommonArg *arg, u32 data )
{
u16 (*src)[ONE_BUF_SIZE/2] = arg->src;
u16 (*dest)[ONE_BUF_SIZE/2] = arg->dest;
char *copyStr = arg->copyStr;
char *fillStr = arg->fillStr;
BOOL c_ercd = TRUE, f_ercd = TRUE;
u32 i, ii;
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
for (ii=0; ii<ONE_BUF_SIZE/2; ii++)
{
src[i][ii] = (u16)(ii+i-data);
}
}
if ( copyStr )
{
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
u16 *s = src[i];
u16 *d = dest[i];
char *str = NULL;
DC_FlushAll();
IC_InvalidateAll();
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_ExDmaCopy( ch, s, d, ONE_BUF_SIZE );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MI_DmaCopy32( ch, s, d, ONE_BUF_SIZE );
}
if ( i == MY_DMA_CH_START )
{
str = copyStr;
}
c_ercd |= CheckDmaCopy( ch, s, d, str );
}
}
if ( fillStr )
{
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
u16 *d = dest[i];
char *str = NULL;
DC_FlushAll();
IC_InvalidateAll();
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_ExDmaFill( ch, d, data+i, ONE_BUF_SIZE );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MI_DmaFill32( ch, d, data+i, ONE_BUF_SIZE );
}
if ( i == MY_DMA_CH_START )
{
str = fillStr;
}
f_ercd |= CheckDmaFill( ch, d, data+i, str );
}
}
return c_ercd | f_ercd;
}
static BOOL CheckDmaCopyAndFillAsync( t_CommonArg *arg, u32 data )
{
u16 (*src)[ONE_BUF_SIZE/2] = arg->src;
u16 (*dest)[ONE_BUF_SIZE/2] = arg->dest;
char *copyStr = arg->copyStr;
char *fillStr = arg->fillStr;
BOOL c_ercd = TRUE, f_ercd = TRUE;
u32 i, ii;
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
for (ii=0; ii<ONE_BUF_SIZE/2; ii++)
{
src[i][ii] = (u16)(ii+i-data);
}
}
if ( copyStr )
{
DC_FlushAll();
while ( GX_GetVCount() != 190 )
{
}
while ( GX_GetVCount() != 191 )
{
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
u16 *s = src[i];
u16 *d = dest[i];
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_ExDmaCopyAsync( ch, s, d, ONE_BUF_SIZE );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MIi_DmaSetParams(ch, (u32)s, (u32)d, MI_CNT_VBCOPY32(ONE_BUF_SIZE) & ~MI_DMA_CONTINUOUS_ON);
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
BOOL bool = FALSE;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
bool = MIi_IsExDmaBusy( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
bool = MI_IsDmaBusy( ch );
}
if ( bool == FALSE )
{
OS_TPrintf( "warning: DmaCopyAsync isn't busy dmaNo = %d.\n", ch );
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_WaitExDma( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MI_WaitDma( ch );
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
u16 *s = src[i];
u16 *d = dest[i];
char *str = NULL;
if ( i == MY_DMA_CH_START )
{
str = copyStr;
}
c_ercd |= CheckDmaCopy( ch, s, d, str );
}
}
if ( fillStr )
{
DC_FlushAll();
while ( GX_GetVCount() != 190 )
{
}
while ( GX_GetVCount() != 191 )
{
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
u16 *d = dest[i];
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_ExDmaFillAsync( ch, d, data+i, ONE_BUF_SIZE );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MIi_DmaSetParams_src32(ch, data+i, (u32)d, (MI_CNT_VBCOPY32(ONE_BUF_SIZE) & ~MI_DMA_CONTINUOUS_ON) | MI_DMA_SRC_FIX);
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
BOOL bool = FALSE;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
bool = MIi_IsExDmaBusy( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
bool = MI_IsDmaBusy( ch );
}
if ( bool == FALSE )
{
OS_TPrintf( "warning: DmaFillAsync isn't busy dmaNo = %d.\n", ch );
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_WaitExDma( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MI_WaitDma( ch );
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
u16 *d = dest[i];
char *str = NULL;
if ( i == MY_DMA_CH_START )
{
str = fillStr;
}
f_ercd |= CheckDmaFill( ch, d, data+i, str );
}
}
return c_ercd | f_ercd;
}
static BOOL CheckDmaStop( t_CommonArg *arg )
{
u16 (*src)[ONE_BUF_SIZE/2] = arg->src;
u16 (*dest)[ONE_BUF_SIZE/2] = arg->dest;
char *copyStr = arg->copyStr;
char *fillStr = arg->fillStr;
BOOL c_ercd = TRUE, f_ercd = TRUE;
u32 i;
if ( copyStr )
{
while ( GX_GetVCount() != 189 )
{
}
while ( GX_GetVCount() != 190 )
{
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
u16 *s = src[i];
u16 *d = dest[i];
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_ExDmaCopyAsync( ch, s, d, ONE_BUF_SIZE );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MIi_DmaSetParams(ch, (u32)s, (u32)d, MI_CNT_VBCOPY32(ONE_BUF_SIZE) & ~MI_DMA_CONTINUOUS_ON);
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
BOOL bool = FALSE;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
bool = MIi_IsExDmaBusy( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
bool = MI_IsDmaBusy( ch );
}
if ( bool == FALSE )
{
OS_TPrintf( "warning: DmaCopyAsync isn't busy dmaNo = %d.\n", ch );
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_StopExDma( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MI_StopDma( ch );
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
BOOL bool = FALSE;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
bool = MIi_IsExDmaBusy( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
bool = MI_IsDmaBusy( ch );
}
if ( bool == TRUE )
{
OS_TPrintf( "error: Stopping DmaCopy failed dmaNo = %d.\n", ch );
}
}
if ( c_ercd == TRUE && copyStr )
{
OS_TPrintf( copyStr );
}
}
if ( fillStr )
{
while ( GX_GetVCount() != 189 )
{
}
while ( GX_GetVCount() != 190 )
{
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
u16 *d = dest[i];
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_ExDmaFillAsync( ch, d, i, ONE_BUF_SIZE );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MIi_DmaSetParams_src32(ch, i, (u32)d, (MI_CNT_VBCOPY32(ONE_BUF_SIZE) & ~MI_DMA_CONTINUOUS_ON) | MI_DMA_SRC_FIX);
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
BOOL bool = FALSE;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
bool = MIi_IsExDmaBusy( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
bool = MI_IsDmaBusy( ch );
}
if ( bool == FALSE )
{
OS_TPrintf( "warning: DmaFillAsync isn't busy dmaNo = %d.\n", ch );
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
MIi_StopExDma( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
MI_StopDma( ch );
}
}
for (i=MY_DMA_CH_END; i>=MY_DMA_CH_START; i--)
{
u32 ch = i;
BOOL bool = FALSE;
if (MI_EXDMA_CH_MIN <= ch && ch <= MI_EXDMA_CH_MAX)
{
bool = MIi_IsExDmaBusy( ch );
}
else if (ch < MI_EXDMA_CH_MIN)
{
bool = MI_IsDmaBusy( ch );
}
if ( bool == TRUE )
{
OS_TPrintf( "error: Stopping DmaFill failed dmaNo = %d.\n", ch );
}
}
if ( f_ercd == TRUE && fillStr )
{
OS_TPrintf( fillStr );
}
}
return c_ercd | f_ercd;
}
static void TestDmaFuncs( void )
{
u32 i;
ClearIntrCount();
// sync copy and fill test
OS_TPrintf( "\nChecking DmaCopy and DmaFill ....\n" );
for (i=0; i<MY_TEST_LOOPS; i++)
{
(void)CheckDmaCopyAndFill( &copyfillArg[i], i );
}
// async copy and fill test
OS_TPrintf( "\nChecking DmaCopyAsync and DmaFillAsync ....\n" );
for (i=0; i<MY_TEST_LOOPS; i++)
{
(void)CheckDmaCopyAndFillAsync( &copyfillAsyncArg[i], i );
}
// stop test
OS_TPrintf( "\nChecking DmaStop ....\n" );
for (i=0; i<MY_TEST_LOOPS; i++)
{
(void)CheckDmaStop( &stopArg[i] );
}
PrintIntrCount();
}
//================================================================================
/*---------------------------------------------------------------------------*
Name: TwlMain
Description: main
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void TwlMain()
{
OS_Init();
InitExDmaIntr();
OS_TPrintf("\nARM9 starts.\n");
// OS_DisableProtectionUnit();
// priority dma test
OS_TPrintf( "\nTurn into Priority Mode.\n" );
MIi_SetExDmaArbitration( MI_EXDMAGBL_ARB_PRIORITY );
MIi_SetExDmaInterval( 4, 595, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 5, 580, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 6, 565, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 7, 550, MI_EXDMA_PRESCALER_1 );
TestDmaFuncs();
// round robin dma test
OS_TPrintf( "\nTurn into Round Robin Mode.\n" );
MIi_SetExDmaArbitration( MI_EXDMAGBL_ARB_ROUND_ROBIN );
MIi_SetExDmaYieldCycles( MI_EXDMAGBL_YLD_CYCLE_DEFAULT );
MIi_SetExDmaInterval( 4, 115, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 5, 111, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 6, 107, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 7, 104, MI_EXDMA_PRESCALER_1 );
TestDmaFuncs();
OS_TPrintf("\nARM9 ends.\n");
OS_Terminate();
}
/*---------------------------------------------------------------------------*
Name: InitExDmaIntr
Description: initialize extended dma interrupt handler
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void InitExDmaIntr(void)
{
(void)OS_SetIrqFunction( OS_IE_DMA4, ExDma4Intr );
(void)OS_SetIrqFunction( OS_IE_DMA5, ExDma5Intr );
(void)OS_SetIrqFunction( OS_IE_DMA6, ExDma6Intr );
(void)OS_SetIrqFunction( OS_IE_DMA7, ExDma7Intr );
(void)OS_EnableIrqMask( OS_IE_DMA4 | OS_IE_DMA5 | OS_IE_DMA6 | OS_IE_DMA7 );
(void)OS_EnableIrq();
}
/*---------------------------------------------------------------------------*
Name: ClearIntrCount
Description: clear interrupt counter
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void ClearIntrCount(void)
{
int i;
OS_ResetRequestIrqMask( OS_IE_DMA4 | OS_IE_DMA5 | OS_IE_DMA6 | OS_IE_DMA7 );
for (i=0; i<MI_EXDMA_CH_NUM; i++)
{
exDmaIntrCount[i] = 0;
}
}
/*---------------------------------------------------------------------------*
Name: PrintIntrCount
Description: print interrupt counter
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void PrintIntrCount(void)
{
OS_TPrintf( "\ninterrupt count: dma4 = %d, dma5 = %d, dma6 = %d, dma7 = %d.\n",
exDmaIntrCount[0], exDmaIntrCount[1], exDmaIntrCount[2], exDmaIntrCount[3]);
}
/*---------------------------------------------------------------------------*
Name: ExDmaIntr
Description: extended dma interrupt handler
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void ExDma4Intr(void)
{
u32 ofs = 4 - MI_EXDMA_CH_MIN;
exDmaIntrCount[ofs]++;
//---- check interrupt flag
OS_SetIrqCheckFlag( OS_IE_DMA4 );
}
void ExDma5Intr(void)
{
u32 ofs = 5 - MI_EXDMA_CH_MIN;
exDmaIntrCount[ofs]++;
//---- check interrupt flag
OS_SetIrqCheckFlag( OS_IE_DMA5 );
}
void ExDma6Intr(void)
{
u32 ofs = 6 - MI_EXDMA_CH_MIN;
exDmaIntrCount[ofs]++;
//---- check interrupt flag
OS_SetIrqCheckFlag( OS_IE_DMA6 );
}
void ExDma7Intr(void)
{
u32 ofs = 7 - MI_EXDMA_CH_MIN;
exDmaIntrCount[ofs]++;
//---- check interrupt flag
OS_SetIrqCheckFlag( OS_IE_DMA7 );
}
/*====== End of main.c ======*/

View File

@ -0,0 +1,32 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - build
# File: Makefile
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded instructions, statements, and computer programs contain
# proprietary information of Nintendo of America Inc. and/or Nintendo
# Company Ltd., and are protected by Federal copyright law. They may
# not be disclosed to third parties or copied or duplicated in any form,
# in whole or in part, without the prior written consent of Nintendo.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
SUBDIRS = \
ARM7 \
ARM9 \
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -1,6 +1,6 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - OS - demos - _ARM7-exDma-1
# Project: TwlSDK - OS - demos - exDma-1
# File: Makefile
#
# Copyright 2007 Nintendo. All rights reserved.
@ -23,7 +23,7 @@ SUBDIRS =
#TWL_CODEGEN = THUMB
TWL_PROC = ARM7
TARGET_BIN = main.axf
TARGET_BIN = exDma7_1.axf
SRCS = main.c

View File

@ -2,7 +2,7 @@
Project: TwlSDK - MI - demos - exDma-1
File: main.c
Copyright 2003-2006 Nintendo. All rights reserved.
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
@ -392,14 +392,23 @@ void TwlMain()
// priority dma test
OS_TPrintf( "\nTurn into Priority Mode.\n" );
MIi_SetExDmaArbiter( MI_EXDMAGBL_ARB_PRIORITY, MI_EXDMAGBL_YLD_CYCLE_DEFAULT );
MIi_SetExDmaArbitration( MI_EXDMAGBL_ARB_PRIORITY );
MIi_SetExDmaInterval( 4, 495, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 5, 480, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 6, 465, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 7, 450, MI_EXDMA_PRESCALER_1 );
TestDmaFuncs();
// round robin dma test
OS_TPrintf( "\nTurn into Round Robin Mode.\n" );
MIi_SetExDmaArbiter( MI_EXDMAGBL_ARB_ROUND_ROBIN, MI_EXDMAGBL_YLD_CYCLE_DEFAULT );
MIi_SetExDmaArbitration( MI_EXDMAGBL_ARB_ROUND_ROBIN );
MIi_SetExDmaYieldCycles( MI_EXDMAGBL_YLD_CYCLE_DEFAULT );
MIi_SetExDmaInterval( 4, 7, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 5, 5, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 6, 3, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 7, 1, MI_EXDMA_PRESCALER_1 );
TestDmaFuncs();

View File

@ -21,7 +21,7 @@ SUBDIRS =
#----------------------------------------------------------------------------
TARGET_BIN = exDma.axf
TARGET_BIN = exDma9_1.axf
SRCS = main.c

View File

@ -401,14 +401,23 @@ void TwlMain()
// priority dma test
OS_TPrintf( "\nTurn into Priority Mode.\n" );
MIi_SetExDmaArbiter( MI_EXDMAGBL_ARB_PRIORITY, MI_EXDMAGBL_YLD_CYCLE_DEFAULT );
MIi_SetExDmaArbitration( MI_EXDMAGBL_ARB_PRIORITY );
MIi_SetExDmaInterval( 4, 595, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 5, 580, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 6, 565, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 7, 550, MI_EXDMA_PRESCALER_1 );
TestDmaFuncs();
// round robin dma test
OS_TPrintf( "\nTurn into Round Robin Mode.\n" );
MIi_SetExDmaArbiter( MI_EXDMAGBL_ARB_ROUND_ROBIN, MI_EXDMAGBL_YLD_CYCLE_DEFAULT );
MIi_SetExDmaArbitration( MI_EXDMAGBL_ARB_ROUND_ROBIN );
MIi_SetExDmaYieldCycles( MI_EXDMAGBL_YLD_CYCLE_DEFAULT );
MIi_SetExDmaInterval( 4, 15, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 5, 11, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 6, 7, MI_EXDMA_PRESCALER_1 );
MIi_SetExDmaInterval( 7, 4, MI_EXDMA_PRESCALER_1 );
TestDmaFuncs();

View File

@ -551,16 +551,39 @@ void MIi_SetExDmaParams( u32 dmaNo, const void *src, void *dest, u32 size, u32 o
u32 fillData, u32 srcDir, u32 destDir);
/*---------------------------------------------------------------------------*
Name: MIi_SetExDmaArbiter
Name: MIi_SetExDmaInterval
Description: set DMA interval
Arguments: dmaNo : DMA channel No.
count : count
prescale : prescale
Returns: None
*---------------------------------------------------------------------------*/
void MIi_SetExDmaInterval( u32 dmaNo, u16 count, MIExDmaPrescaler prescale );
/*---------------------------------------------------------------------------*
Name: MIi_SetExDmaArbitration
Description: set DMA arbitration
Arguments: arb : arbitration algorism
yld : yield cycles for round robin
Returns: None
*---------------------------------------------------------------------------*/
void MIi_SetExDmaArbiter( MIExDmaArbitration arb, MIExDmaYieldCycles yld );
void MIi_SetExDmaArbitration( MIExDmaArbitration arb );
/*---------------------------------------------------------------------------*
Name: MIi_SetExDmaYieldCycles
Description: set DMA yield cycles
Arguments: yld : yield cycles for round robin
Returns: None
*---------------------------------------------------------------------------*/
void MIi_SetExDmaYieldCycles( MIExDmaYieldCycles yld );
#ifdef __cplusplus