NDS中ARM7与ARM9间的通信



掌叔
2009-02-22 08:57:38

摘自:[url]www.fw211.com[/url]
作者:火精灵

NDS中ARM7与ARM9的分工比较明确,ARM7主要处理音频、无线通信、实时时钟等,ARM9主要处理视频等主要任务。要使得它们能够协同工作,那么就必须有一个比较有效的通信办法。从NDS的系统框图上看可以知道ARM7与ARM9的AHB总线通过FIFO连接,对于主存与游戏卡则通过EMI(外部总线接口)连接。这样我们就可以通过FIFO与主存来进行通信与数据交互了。接下来介绍4个寄存器:
4000180h - NDS9/NDS7 - IPCSYNC - IPC Synchronize Register (R/W)
Bit Dir Expl.
0-3 R Data input from IPCSYNC Bit8-11 of remote CPU (00h..0Fh)
4-7 - Not used
8-11 R/W Data output to IPCSYNC Bit0-3 of remote CPU (00h..0Fh)
12 - Not used
13 W Send IRQ to remote CPU (0=None, 1=Send IRQ)
14 R/W Enable IRQ from remote CPU (0=Disable, 1=Enable)
15-31 - Not used
同步寄存器,可以利用它来进行ARM7与ARM9的同步握手。
4000184h - NDS9/NDS7 - IPCFIFOCNT - IPC Fifo Control Register (R/W)
Bit Dir Expl.
0 R Send Fifo Empty Status (0=Not Empty, 1=Empty)
1 R Send Fifo Full Status (0=Not Full, 1=Full)
2 R/W Send Fifo Empty IRQ (0=Disable, 1=Enable)
3 W Send Fifo Clear (0=Nothing, 1=Flush Send Fifo)
4-7 - Not used
8 R Receive Fifo Empty (0=Not Empty, 1=Empty)
9 R Receive Fifo Full (0=Not Full, 1=Full)
10 R/W Receive Fifo Not Empty IRQ (0=Disable, 1=Enable)
11-13 - Not used
14 R/W Error, Read Empty/Send Full (0=No Error, 1=Error/Acknowledge)
15 R/W Enable Send/Receive Fifo (0=Disable, 1=Enable)
16-31 - Not used
FIFO控制寄存器,用来控制FIFO与读取FIFO的状态。
4000188h - NDS9/NDS7 - IPCFIFOSEND - IPC Send Fifo (W)
Bit0-31 Send Fifo Data (max 16 words; 64bytes)
发送FIFO地址,16个32bits的深度。
4100000h - NDS9/NDS7 - IPCFIFORECV - IPC Receive Fifo (R)
Bit0-31 Receive Fifo Data (max 16 words; 64bytes)
接收FIFO地址,16个32bits的深度。
在使用FIFO的时候我们最常用的是打开接收FIFO非空的中断请求,预先约定好数据消息的格式,并且设置好每个数据消息的回调函数,这样对方处理器通过 FIFO发送过来的数据消息就可以在本地产生非空的中断,从而调用本地的回调函数,实现了两个处理器的完美通信。主存后4M是可以用来系统调试与处理器间通信的,两个处理器可以约定某些固定地址来存放通信间的数据。