ADSP-218X的IDMA接口自举设计
对主机来说,DSP_ADDR是218X的控制端口地址,注意其地址A1为1;DSP_DATA是218X的数据端口,地址A1为0。这是因为A1接218X的IAL引脚。
#define DSP_ADDR (*(volatile unsigned short *)0x300002
#define DSP_DATA (*(volatile unsigned short*)0x300000)
//功能:判断218X的IACK信号是否有效。主机每进行一次IDMA访问前都要先判IACK。
Void wait_ack(void)
{unsigned char ch;
while(1)/*查询I/O口,判断IACK是否为低,为低则已获利218X确认,退出*/
{ch=SIM_PORTF;
if((ch & 0x20)!=0x20)break;
}
}
//功能:完成218X程序下载
void DownCodeToDSP(void)
{unsigned short iCount,ip,idata;
ip=0;
while(1)
{iCount=DSP_ROM_CODE[ip++];//读要写的字节数
if(iCount==0xffff)break;
//当字节数为0xffff时,218X所有段都已下载完成,结束下载wait_ack();
DSP_ADDR=DSP_ROM_CODE[ip++];
//向218X的IDMA口写起始地址
while(iCount) //此循环完成写一个段
{idata=DSP_ROM_CODE[ip++];
//向218X的IDMA口数据或程序代码
DSP_DATA=idata;
wait_ack();
iCount--;}
}
}
一般单片机的计算功能,特别是乘、除法性能比较差,开发人员可根据自己所要设计的系统的要求,选择相应的主机CPU。要求至少是16位的单片机,因为IDMA接口为16位的地址/数据总线。在程序功能的分配上,让主机完成一些复杂的逻辑运算、通信等功能,主机通过IDMA接口与218X相连;由218X完成极为耗时的乘、除法计算。主机通过IDMA接口为218X下载程序,减少了218X的程序片;双方通过IDMA接口交换数据,这又减少了218X与主机之间的双口RAM。对于主机来说,218X只不过是一个计算协处理器,系统设计成本低而又极为简洁。
《ADSP-218X的IDMA接口自举设计(第3页)》