DSP虚拟I2C软件包的应用设计案例

数字信号处理器(dsp)在各领域中的应用已日趋广泛,其中ti(texas instrument)公司的tms320系列芯片占据了主导地位。tms320f206(简称f206)由于具有片内32k字的flash,支持jtag扫描端口的仿真调试,并支持程序的串行下载,便于开发设计及产品的软件升级,因而在中高档仪器开发中受到青睐。
dsp的处理速度虽然较高,但直接支持的i/o口线较少,控制能力相对较弱,因而与外部器件接口采用串行方式较为适合。常用的串行接口和串行总线有uart、i2c总线,由于i2c总线提供了较完善的总线协议,且接口电路简单,因而得到广泛的应用。目前,已有很多外围器件支持i2c接口,但多数mcu并不直接支持i2c总线,因而采用i/o口线模拟i2c的方式成为一种通用解决方案。但由于i2c总线协议的复杂性及操作管理的特殊性,仍给此类方式的开发造成了较大不便。好在文献中提出了一种按平台模式设计的、适用于80c51的虚拟i2c总线软件包,大大简化了80c51的i2c接口程序设计,使用户无需了解i2c总线协议的细节,即可实现相应的接口。文献中也给出了一种用于msp430单片机的软件包。由于dsp尚无此类软件包,为简化dsp的此类i2c接口程序设计,本文参照文献中的设计原则,设计了一种适用于tms320c2xx系列dsp开发的软件包。
1 虚拟i2c软件包的设计
根据文献中所提到的最佳包容性设计、后归一化设计、前归一化设计原则,软件包进行了如下定义。
(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内容无关。
③ 资源占用。使用了辅助寄存器ar0、ar1、ar2、ar6、acc、aspcr、iosr等资源。
④ 应用接口。软件包将wrnbyte、rdnbyte作为唯一的出口接口,用户仅需正确设置对应储存单元的内容,调用相应子函数即可:
splk #slar/ slaw,sla;写入传输节点地址及传输方向
splk #n,numbyte ;写入待传输字节数
;若输出,设置输出缓冲区内容
call wrnbyte/rdnbyte
3 应用实例
3.1 器件相关功能简介
x1203是带时钟/日历电路和两个闹钟(报警)的低功耗cmos实时时钟芯片。提供了双埠时钟和报警寄存器,在读写操作期间也能精确工作。其工作电压从2.5~6 v均可,工作电流小于1ua。时钟使用低成本的32.768 khz晶体输入,以秒、分、时、日、星期、月和年为单位记录时间,具有闰年自动矫正功能,并对少于31天的月份自动调整;可通过设置中断标志按指定时间激活中断引脚,满足大多数用户对定时器编程的需要。该芯片引脚结构如图1所示(soic封装)。
其中scl为时钟输入端,数据随该时钟信号同步输入器件或从器件输出。此引脚上的输入缓冲器始终激活。sda端为双向引脚,用于串行数据的输入输出;具有漏极开路,可与其它漏极开路或集电极开路输出进行线“或”;需上拉电阻,与scl引脚配合,可实现400 khz的2线i2c接口。vback为备用电源输入端,用于vcc出现故障时向器件供电。是中断信号输出端,可通过设置报警寄存器按指定时间在该端产生报警信号;漏极开路,低电平有效。x1、x2分别为反相放大器的输入、输出端;可在x1端接入32.768 khz的方波基准,或在x1、x2端接入32.768 khz的石英晶振,配置成片内振荡器,在初始上电后至少有一个字节写入rtc寄存器时,时钟才开始计数。
x1203中的时钟/控制寄存器(ccr)分5部分:2个8字节报警寄存器(alarm0、alarm1),1个1字节控制寄存器,1个8字节实时时钟寄存器和1个1字节状态寄存器。通过报警寄存器可设置报警发生的时间,控制寄存器可使能或禁止报警中断信号的输出,实时时钟寄存器以bcd码存储了秒、分、时、日、星期、月和年,状态寄存器中保存了用于报警状态标志位及读写使能状态位。其中状态寄存器设置决定着数据是否能成功地写入。该寄存器如表1所列。
bat标识器件当前用vback还是用vcc工作。al1、al0标识alarm0、alarm1是否实时时钟匹配。rtcf表示实时时钟是否失效,在总电源失效后该位置1。rwel为寄存器写使能锁存,为0表示禁止,在任何写时钟/控制寄存器之前必须将该位置1。wel为写使能锁存,低表示禁止,通过该位写1、其它位写0,可使该位置位;通过该位写0、其它位写0,可使该位清0。只有按规定顺序设置rwel和wel,才能成功写入ccr。
目前,很多dsp芯片尚不直接支持i2c的接口,f206也不例外,因而这里采用2根通用i/o口线模拟i2c接口。f206与x1203的接口采用如图2所示的接口方案。
图2中在x1、x2端接入32.768 khz的石英晶振,将时钟源配置为片内振荡器。在vcc和vback之间通过二极管和电阻相连,并与地间加入1个0.47 f的大电容。这样,在电源出现故障或系统电源关闭时,仍可靠vback端的大电容供电维持时钟芯片的正常工作。它与f206间接口采用3根口线,这里采用io2模拟通信用的时钟信号,io3作为数据输入、输出口线。端可根据用户需要而定,若需要时钟芯片产生中断,可将该端接到f206的中断口线上。注意其中的sda端和端为漏极开路,必须加上拉电阻,否则不能正常通信。
3.2 x1203的读写操作
这里仅给出f206对x1203进行读写的基本流程,如图3、图4所示,分别为对时钟芯片的读、写过程。其中进行寄存器写时,须注意sr寄存器中wel和rwel的设置是否正确,即首先设置wel有效,而后将wel、rwel都置1,否则数据将不能正确写入。在写结束后,应将wel、rwel置为无效,以免产生误操作。
此外还须指出,在系统首次上电后(vback和vcc都失效后),至少有一字节写入rtc寄存器时,系统才开始工作。在实际使用中,应首先判断sr中的rtcf位是否为1,若是,表明系统为首次使用或vback和vcc都已失效,须对x1203至少进行一次写入操作,使其正常计数。
结束语
i2c总线应用已日益广泛,而其协议的复杂性和操作的特殊性又限制了推广速度。本文介绍的一种基于dsp的虚拟i2c总线软件包,简化了tms320c2xx与i2c器件间接口程序设计,用户无需了解i2c总线协议的细节,仅需通过唯一的接口界面wrnbyte/ rdnbyte即可实现相应的接口。本文还给出了一个tms320f206与时钟芯片x1203间的接口实例,介绍了软件包的使用方法,希望能供读者参考。

如何使用555定时器实现LED驱动器的控制
LoRa和LoRaWAN两者网络之间有什么区别?
小米发布会:一天能召开完吗?
移动服务交付保证:主动测试与被动监控
荣耀手环4Running版评测 时尚运动范儿十足的潮玩新品
DSP虚拟I2C软件包的应用设计案例
台积电研发3nm工艺遇阻
Agilent安捷伦E8364A网络分析仪E8364B
NVIDIA收购ARM,加速了RISC-V在边缘AI的神经网路方面的应用
摩托罗拉Edge +揭示了带有打孔的精美瀑布显示屏
AWE 2019大会人工智能成主角,克路德蓄力拓展智慧酒店场景化
40岁女神20岁的脸,陈数海信直播,容颜无惧8K
小米11怎么样值得买吗?小米11开箱评测小米11优缺点
第129届广交会是如何做线上三维展示链接的
关于智能驾驶的乐趣分享和介绍
苹果三星Fitbit在可穿戴健康设备领域做了哪些布局
电瓶修复技术:充电器最土但有效的方法是什么
教你如何计算MOS管的开关电路(一)
从零开始入门 | Kubernetes 中的服务发现与负载均衡
称重传感器激励电压