XINTF
(如有错误,请指正,谢谢)
28335的XINTF是一个并行非复用异步总线,与2812不同的是zone7非复用,数据总线地址总线宽度不同,而且支持DMA操作(2812没有DMA)。XINTF可以配置成16位数据模式和32位数据模式。
1. XINTF各个引脚以及相关模式的说明
图1
图2
XREADY: 外部输入,在完成访问后,外部的设备拉高此引脚通知DSP。可以配置忽略此引脚或使用次引脚,忽略与否会导致操作时序的时间有变化。具体可看数据手册的配置说明。
XD(32):32位的数据数据总线,配置为16位时,只用0~15
XA(20):20位地址线。比较特殊的是XA0:16位格式时,XA0为地址线的最低位,为0表示偶数地址,为1表示奇数地址。32位格式时,XA0被设置为写使能信号。如图2所示,由于外扩的存储设备都是16位的,所以需要两个存储设备分别存储32位的低16位,和高16位。当读操作时,相应的片选信号zone(0,6,7)拉低,两个16为存储器同时片选,读信号拉低,两个16位存储器将各自的数据放到32位数据总线上,dsp读取数据,操作完毕。当写操作发生时,XA0变为XWE1,控制高16位的写。如下表所示。
XHOLD(输入)与XHOLDA(输出):其它访问memory的设备通过XHOLD引脚与dsp通信,为低表示要方为memory,希望DSP释放总线,为高则不影响DSP。DSP通过XHOLDA告诉外部设备是否已经释放了总线,为低表示响应外部设备的要求,释放了总线。为高则表示没有释放总线。
XINTCNF2寄存器的HOLD位为0时,外部其它设备通过拉低XHOLD引脚通知cpu放弃总线,当cpu释放总线后(总线为高阻态),cpu通过拉低XHOLDA告诉外部设备总线已经释放,外部设备可以访问外部的memory。
XINTCNF2寄存器的HOLD位为1时,无论引脚XHOLD是高还是低,都不会释放总线,而且会始终拉高引脚XHOLDA,告诉外部其它要访问memory的设备,总线没有被释放。
2. DSP流水线的写跟随读保护
以上是没有保护的读写顺序,由汇编程序可以看出,程序的顺序是写之后读,但实际执行起来变成了读之后写。在部分区域内,DSP28*系列通过硬件对以上操作进行了保护,XINTF0就属于被保护的区域,保护之后读写时序变为如下图所示,恢复正常。
对相同地址的读写操作,28系列的DSP均有保护,保证读写顺序正常。上述的保护机制针对的是:读写操作地址不同,但地址都在同一个块区,且这个块区受读写保护。
当外设寄存器被映射到一个区域内,如果修改寄存器A值的会改变寄存器B的值,如果没有写跟随读保护,那按照默认的读写顺序,先读取了B的值,再更改A的值,这样结果就错了。因为期望的是先修改A,再读出因修改了A而改变的B的值。写跟随读保护会用硬件在写操作之后,增加等待时间,直到A写完成后,再去读取B的值。XINTF的zone0就有此保护机制,因此,zone0通常不被用作对外部memory的操作,而经常被用作对外部外设寄存器的操作。
注意:更改XINTF寄存器的程序不能在XINTF中执行。
3. XINTF时钟的以及读写时序
根据上图配置XINTF时钟,由上图可以看出,读写时序中的LEAD/ACTIVE/TRAIL均以时钟XTIMCLK为基准。
XINTF的读写时序可以分为三个部分:LEAD/ACTIVE/TRAIL
LEAD:片选信号拉低,访问地址放置到地址总线上,最高可设置为6个XTIMCLK时钟周期。
ACTIVE:(1)读操作:读使能信号拉低,把数据总线上的数据所存到DSP。
(2)写操作:写使能信号拉低,并将数据放置到数据总线上。
如果XINTF区域被配置为采样XREADY信号,外部设备会通过控制XREADY信号,在XINTF通过寄存器已经配置好的ACTIVE等待时间的基础上,进一步扩展XINTF的ACTIVE等待时间。如果不采样XREADY信号,实际的ACTIVE周期也比配置的多1个XTIMCLK。默认情况下,ACTIVE被配置为14个XTIMCLK。
TRAIL:片选信号依然为低,但读/写使能信号已经恢复为高。默认情况下,此阶段倍配置为6个XTIMCLK。
如果配置了采样XREADY(高有效),则时序变化如下:
(实在懒得翻译)
4. XBANK
当访问从XINTF的zone变为XINTF的另一个zone,一个慢速设备需要额外的周期来释放总线。周期数在XBANK的寄存器中配置。
配置的注意事项如下:
XBANK配置的时间必须小于前一个访问区域的周期数。由XBANK寄存器确定哪个区域需要配置延迟时间(只能配置0,6,7中的一个区域需要延迟时间)以及延迟多少时间,下面以配置zone7需要延迟时间为例:
5. 读写时序图
28335的数据手册最后部分有详细的图示