From af7ab065d29b8b899ea8567e006154b628063413 Mon Sep 17 00:00:00 2001 From: nakasima Date: Wed, 23 May 2007 11:29:59 +0000 Subject: [PATCH] update about dma. git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@78 4ee2a332-4b2b-5046-8439-1ba90f034370 --- build/buildsetup/ioreg/io_register_list.csv | 159 ++-- .../buildsetup/ioreg_sp/io_register_list.csv | 104 +-- build/libraries/mi/common/mi_exDma.c | 77 +- build/libraries/mi/common/mi_init.c | 6 +- build/tests/mi/Makefile | 1 + build/tests/mi/allDma-1/ARM7/Makefile | 44 ++ build/tests/mi/allDma-1/ARM7/src/main.c | 694 +++++++++++++++++ build/tests/mi/allDma-1/ARM9/Makefile | 42 ++ build/tests/mi/allDma-1/ARM9/src/main.c | 703 ++++++++++++++++++ build/tests/mi/allDma-1/Makefile | 32 + build/tests/mi/exDma-1/ARM7/Makefile | 4 +- build/tests/mi/exDma-1/ARM7/src/main.c | 15 +- build/tests/mi/exDma-1/ARM9/Makefile | 2 +- build/tests/mi/exDma-1/ARM9/src/main.c | 13 +- include/twl/mi/exDma.h | 29 +- 15 files changed, 1773 insertions(+), 152 deletions(-) create mode 100644 build/tests/mi/allDma-1/ARM7/Makefile create mode 100644 build/tests/mi/allDma-1/ARM7/src/main.c create mode 100644 build/tests/mi/allDma-1/ARM9/Makefile create mode 100644 build/tests/mi/allDma-1/ARM9/src/main.c create mode 100644 build/tests/mi/allDma-1/Makefile diff --git a/build/buildsetup/ioreg/io_register_list.csv b/build/buildsetup/ioreg/io_register_list.csv index 64520a8..47bfc48 100644 --- a/build/buildsetup/ioreg/io_register_list.csv +++ b/build/buildsetup/ioreg/io_register_list.csv @@ -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、 p177〜p178,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 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,,,,,, diff --git a/build/buildsetup/ioreg_sp/io_register_list.csv b/build/buildsetup/ioreg_sp/io_register_list.csv index 804abf1..3341ecd 100644 --- a/build/buildsetup/ioreg_sp/io_register_list.csv +++ b/build/buildsetup/ioreg_sp/io_register_list.csv @@ -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,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, #外部メモリ 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,,,,,,,,,,,,,,,,,,,,, #キャプチャ 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,,,,,,,,,,,,,,, diff --git a/build/libraries/mi/common/mi_exDma.c b/build/libraries/mi/common/mi_exDma.c index 38b1bb5..03c3f23 100644 --- a/build/libraries/mi/common/mi_exDma.c +++ b/build/libraries/mi/common/mi_exDma.c @@ -16,33 +16,80 @@ #include -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]; diff --git a/build/libraries/mi/common/mi_init.c b/build/libraries/mi/common/mi_init.c index 928a062..05ee253 100644 --- a/build/libraries/mi/common/mi_init.c +++ b/build/libraries/mi/common/mi_init.c @@ -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 ); } diff --git a/build/tests/mi/Makefile b/build/tests/mi/Makefile index 45e61ef..6a50d39 100644 --- a/build/tests/mi/Makefile +++ b/build/tests/mi/Makefile @@ -25,6 +25,7 @@ SUBDIRS = \ ifneq ($(TWL_PLATFORM),DSTEG) SUBDIRS += \ exDma-1 \ + allDma-1 \ endif diff --git a/build/tests/mi/allDma-1/ARM7/Makefile b/build/tests/mi/allDma-1/ARM7/Makefile new file mode 100644 index 0000000..89b2faf --- /dev/null +++ b/build/tests/mi/allDma-1/ARM7/Makefile @@ -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 ===== diff --git a/build/tests/mi/allDma-1/ARM7/src/main.c b/build/tests/mi/allDma-1/ARM7/src/main.c new file mode 100644 index 0000000..84c6c1e --- /dev/null +++ b/build/tests/mi/allDma-1/ARM7/src/main.c @@ -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 +#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; isrc; + 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=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=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 +#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; isrc; + 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=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=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