DSP虚拟I2C总线软件包的设计及应用实例
发布时间:2008/6/3 0:00:00 访问次数:395
引言 | ||||||||||||||||||||
数字信号处理器(dsp)在各领域中的应用已日趋广泛,其中ti(texas instrument)公司的tms320系列芯片占据了主导地位。tms320f206(简称f206)由于具有片内32k字的flash,支持jtag扫描端口的仿真调试,并支持程序的串行下载,便于开发设计及产品的软件升级,因而在中高档仪器开发中受到青睐。 | ||||||||||||||||||||
dsp的处理速度虽然较高,但直接支持的i/o口线较少,控制能力相对较弱,因而与外部器件接口采用串行方式较为适合。常用的串行接口和串行总线有uart、i2c总线,由于i2c总线提供了较完善的总线协议,且接口电路简单,因而得到广泛的应用。目前,已有很多外围器件支持i2c接口,但多数mcu并不直接支持i2c总线,因而采用i/o口线模拟i2c的方式成为一种通用解决方案。但由于i2c总线协议的复杂性及操作管理的特殊性,仍给此类方式的开发造成了较大不便。好在文献[1]中提出了一种按平台模式设计的、适用于80c51的虚拟i2c总线软件包,大大简化了80c51的i2c接口程序设计,使用户无需了解i2c总线协议的细节,即可实现相应的接口。文献[2]中也给出了一种用于msp430单片机的软件包。由于dsp尚无此类软件包,为简化dsp的此类i2c接口程序设计,本文参照文献[1]中的设计原则,设计了一种适用于tms320c2xx系列dsp开发的软件包。 | ||||||||||||||||||||
1 虚拟i2c软件包的设计 | ||||||||||||||||||||
根据文献[1]中所提到的最佳包容性设计、后归一化设计、前归一化设计原则,软件包进行了如下定义。 | ||||||||||||||||||||
(1)适用范围 | ||||||||||||||||||||
① 适用主发送和主接收方式。i2c总线有4种工作方式:主发送、主接收、从发送、从接收。因实际dsp多工作于i2c总线的主方式,因而软件包设计为主方式。 | ||||||||||||||||||||
② 适用tms320c2xx系列与i2c总线外围器件的接口,支持对外围器件n字节的读写,通信方式为对虚拟节点寻址后点对点的读写。 | ||||||||||||||||||||
③ 模拟i/o口线可选择4根通用i/o口线(i/o0~ i/o4)中的任意两根。 | ||||||||||||||||||||
(2)软件包结构设计 | ||||||||||||||||||||
tms320c2xx系列产品,基本包括4根通用i/o口线i/o0~i/o4(由于xf仅能作为输入口线,bio仅能作为输出口线,因而暂不考虑)。它们的输入输出方向由aspcr的低4位来设定,相应口线状态的设定或读取由iosr寄存器控制。但此处dsp与80c51有所不同,口线的输入输出状态不是自动切换的,且aspcr、iosr寄存器都不支持位寻址方式,因而在进行i2c总线工作方式模拟时较为繁琐。为避免所用寄存器其它状态位的改变,需通过较多的与、或操作来改变指定i/o口线的状态,因而本软件包与80c51的虚拟i2c软件包结构稍有不同。当然,这些均在软件包内部完成,使用者不必了解具体细节,用户接口同样简单易用。 | ||||||||||||||||||||
① 软件包组成。为模拟i2c总线的操作时序,软件包中包括了2个宏定义和12个子函数。 | ||||||||||||||||||||
(a)时序模拟子程序 sendb--发送起始标志,启动i2c总线;senda--发送确认标志; sendna--发送非确认标志;sende--发送结束标志。 | ||||||||||||||||||||
(b)操作模拟子程序 geta--接收确认标志;sendd--发送8位数据; getd--接收1个字节数据。 | ||||||||||||||||||||
(c)数据读写子程序 wrnbyte--写入n字节;rdnbyte--读取n字节。 | ||||||||||||||||||||
(d)其它宏及子函数 subsendd--根据标志位c设置模拟数据口线的状态;toggleclk--切换模拟时钟口线状态; xdelay--延时子程序;sdainm--将模拟数据口线a配置为输入口线; sdaoutm--将模拟数据口线配置为输出。 | ||||||||||||||||||||
因dsp的工作频率一般远高于i2c总线的操作频率,因而这里需专用的延时子程序降低模拟时钟口线频率。本文所给出的源程序为f206采用40 mhz晶振时的情况,用户使用时可随实际情况调整延时时间。 | ||||||||||||||||||||
② 软件包符号定义。软件包中包括如下符号定义: | ||||||||||||||||||||
vsda、vscl--分别定义了模拟数据口线和模拟时钟口线对应的屏蔽位,因dsp中对通用i/o口线的操作不能通过位操作来实现,因而仅能屏蔽位来定义,如采用io3模拟数据线、io2模拟时钟线,则可定义io3为08h、io2为04h; ram0--为数据暂存用的临时存储单元; rio--为用于保存i/o口线当前状态的存储单元; sla--用于保存总线上节点地址并确定传输方向的存储单元; numbyte--待发送或接收的字节数存储单元; mtd--发送数据缓冲区; mrd--接收数据缓冲区。 | ||||||||||||||||||||
以上符号中ram0、rio、sla、numbyte为页内地址,与当前的页指针dp内容设置有关;mtd、mrd为绝对地址,与dp内容
|