想使用XINTF先要弄清楚里面有些什么,外面有些什么引脚需要接线。
XINTF一共有5个空间,分别是Zone0、Zone1、Zone2、Zone6、Zone7,每个空间有相应的片选信号线连接到外面。其中1、2共用一根片选线,6、7共用一根片选线;2、6共用相同的外部地址,外部首地址0x0 0000、尾地址0x7 ffff;1、2占用的外部总线地址不同,0的为0x2000~0x3fff、1的为0x4000~0x5fff;空间7可以作为外部启动的存储空间,由于这个空间的特殊性,所以暂时不打算用,也就不放在这里讨论了。
观察了一下开发板,CPLD的接线为8根数据线,五根地址线,空间0、1共用的片选线,还有R/W读写信号线,WE写使能信号线,RD读使能信号线。
对XINTF空间的操作分为以下三个部分,引导、激活、跟踪。
引导:访问区域的片选信号为低,相应地址放在外设总线上,引导部分的周期通过XTIMCLK来配置时序。
激活:访问外部设备,由于我只进行读操作,所以将读使能信号线拉低,外部接口的数据被锁存到DSP中。暂不打算使用XREADY信号采样。
跟踪:跟踪周期是指读写信号置成高电平之后片选信号仍然保持低电平一段时间。
由于是使用开发板,为了使DSP与片外的RAM和FLASH不产生干扰,将数据配置在空间0、1的片选信号线上,在CPLD端未接有效的片选信号,相当于不产生任何作用,以防导致整个系统出现不稳定的状态而死掉。使用这一块的主要目的是接收CPLD发出来的8位并行数据,在激活部分仅仅使用了读信号为低,让DSP一直处于读数据的状态。
使用空间0、1的区别在于不同的地址,所以根据程序来修改,对XINTF模块寄存器做一个分析,其他的空间区域寄存器也大同小异。配置寄存器XINTCNF2,可以控制所有的区域空间一样,时序寄存器(XTIMINGx)个空间不同。
配置寄存器。再给的学习板做给的程序中有这几位做了设定:XTIMCLK=1选择为1/2系统输出时钟;CLKOFF=1关闭XCLKOUT模式,为了节电和减少噪声,复位后该位被置1;CLKMODE=1使得XCLKOUT=XTIMCLK/2;WRBUFF=0没有写缓冲,CPU等待外部接口访问结束才可以执行程序。
时序寄存器。USEREADY=0访问区域时XREADY信号被屏蔽;XSIZE=3只能这样设置呀,不知道是为什么,占有两位数据,其他的三中设置都是错误的哦;XWRACTIVE=7写操作激活阶段等待状态周期选择为7;XWRTRAIL=3写操作跟踪阶段周期为3;XWRLEAD=3写操作引导阶段周期为3;XRDLEAD=3读操作引导;XDACTIVE=7读操作激活;XRDTRAIL=3读操作跟踪;X2TIMING确定上述的六个周期是否需要加倍,=0不加倍,=1为两倍。
XBANK寄存器。BCYC=7,确定连续访问之间添加的XTIMCLK周期个数;BANK=0,因为暂时打算使用Zone0的空间区域。
好,该设置的寄存器都设置好了,是否能够正常工作了呢,先试一下看看数据能否从D0~D7的管脚锁进到DSP中。
Terry Deng:
感谢你对吧自己对寄存器的分析和配置,详细的做记录和分享上来。