|
TI公司的DSP芯片TMS320VC5410A(简称5410A)是性能卓越的低功耗定点16位DSP,在嵌入式系统中有着广泛应用,5410A没有专门的通用I/O引脚,仅有XF引脚可以作为单向输出,/BIO引脚作为单向输入,同时5410A的片上外设没有I2C接口,所以,当5410A需要控制外围芯片或与其他芯片进行通信时(如I2C通信),必须扩展通用I/O口,本文首先介绍5410通用I/O口的多种扩展方式,然后针对每种扩展方式实现与语音芯片TLV320AIC23的I2C通信。
1 通用I/O口的多种扩展方式
1.1 使用多通道缓冲串行接口扩展通用 I/O口
5410A具有3个多通道缓冲串行(简称MCBSP)接口,每个MCBSP接口有6个引脚,在通常情况下,可以灵活地与外围设备进行串行通信。在需要的时候,可以配置为通用I/O口。
MCBSP的6个引脚分别是BCLKR、BCLKX、BFSR、BFSX、BDR和BDX,通过配置MCBSP的子寄存器PCR来实现通用I/O口的扩展,下面对图1所示的PCR寄存器的配置进行阐述。
1)15位与16位。保留。
2)第13位XIOEN和12位RIOEN,控制着MCBSP的功能,分别对应着3个引脚,XIOEN控制BCLKX、BFSX和BDX,RIOEN控制BCLKR、BFSR和BDR,其中BDX只能作为单向输出,BDR只能作为单向输入,当这两位置0时,MCBSP作为普通的串行接口与外部通信,当这两位置1时,把MCBSP置为通用I/O口。XIOEN和RIOEN对引脚的控制是分开的,例如XIOEN=1,RIOEN=0时,BCLKX、BFSX和BDX三个引脚是作为同月I/O口的,而BCLKR、BFSR和BDR依然可以作为通用串行口的接收。
3)11位-8位,控制着相应引脚的输入/输出,配置为输入时置0,配置为输出时置1,例如BCLKR引脚为输出,则置第8位CLKRM为1,BCLKX引脚为输入,则置第9位CLKXM为0。
4)第7位与6位,与通用I/O口无关。
5)第5位LX_STATE,作为BDX引脚的输出控制,置1输出高电平,置0输出低电平。
6)第4位DR_STATE,表示BDR引脚的输入状态,读入1表示输入高电平,读入0表示输入低电平。
7)第3-0位,在输出时控制着相应引脚的高低电平,而作为输入时,可以从对应引脚读出电平的高低状态,在这里要注意:在配置MCBSP为通用I/O口时,要首先停止串行接口的收发,即配置SPCR1中的RRST位为0,SPCR2中的XRST位为0。
1.2 使用主机接口(HPI)扩展通用I/O口
5410A具有增强型8位和16位主机接口(简称HPI),通常情况下用来与主机进行高速率的数据通信,需要时可以禁止主机接口的功能,扩展为通用I/O口。 HPI接口有8位数据线HD0-HD7可以用来作为通用I/O口,通用I/O口的扩展是通过两个专用寄存器GPIOCR(通用I/O口控制寄存器)和GPIOSR(通用I/O口状态寄存器)的控制来实现的。下面对图2和图3所示的两个寄存器的配置进行阐述。
图2和图3中的DIR7-DIR0和HD7-HD0引脚一一对应,GPIOCR用来控制通用I/O口的读/写方向。当7-0中的某一位置0时,对应的引脚配置为输入,当置为1时,对应引脚配置为输出,例如DIR7置为0时,DH7作为输入引脚,DIR6置为1时,DH6作为输出引脚,GPIOSR在作为输出时是用来控制I/O口的高低电平,置为1高电平,置0为低电平,在作为输入时,相应的位用来反应对应引脚上的电平状态。在这里要注意:在配置HPI接口为通用I/O口时,在硬件设计上需要将5410A的第92引脚(HPIENA)悬空或者接地,来禁止HPI接口。
1.3 使用XIO2接口扩展通用I/O口
5410具有片上增强型外部并行接口(XIO2),该接口具有23位地址线(A22-A0)和16位数据线(D15-D0),通常该接口用来与SRAM或其他并行设备进行通信,在需要的时候可以被用作通用I/O口来使用。作为I/O口使用时,使用PORTW合POWTR指令来发出和读入数据。在这里需要注意的是,23根地址线只能作为输出引脚,16位数据线可以被用作通用双向I/O引脚来使用。
2 模拟I2C接口与TLV320AIC23的通信
2.1 I2C接口和TLV320AIC23简介
I2C(Inter-Integrated Circuit)总线是一种由Philips公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据,在CPU与被控IC之间,IC与IC之间进行双向传送。各种被控制电路均并联在这条总线上,但就象电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址。I2C总线主要的优点是其简单性和有效性,由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片引脚的数量,降低了互联成本,总线的长度可高达25英尺,I2C总线的另一个优点是:支持多主控(multimastering),任何能够进行发送和接收的设备都可以成为主总线,图4给出了与I2C接口通信的数据流程。有关I2C总线的详细资料请查阅参考文献[1]。
TLV320AIC23(简称AIC23)是TI公司推出的一款高性能的立体声音频编/解码芯片,可以在8-96KHz的频率范围内提供16位、20位、24位和32位的采样,ADC和DAC的输出信噪比可以分别达到90dB和100dB;具有很低的功耗,回放模式下功率仅为23mW,省电模式下更是小于15μW,因此AIC23是一款非常理想的音频模拟I/O器件,可以很好地应用在数字音频领域,有关AIC23的详细资料请查阅参考文献[2],AIC23的配置有SPI和I2C两种方式,这里介绍以通用I/O口模拟I2C通信来配置AIC23。AIC23的I2C时序图如图5所示。
2.2 用MCBSP接口作为通用I/O模拟I2C接口
使用MCBSP和AIC23的I2C接口的原理如图6所示,在这里使用5410A的MCBSP1的BCLKX1和BFSX1引脚与AIC23的SCLK和SDIN引脚连接。BCLKX1作为I2C的时钟,BFSX1作为I2C的数据线。需要注意的是,必须把AIC23的MODE引脚接地。才能选中AIC23的I2C模式;而且当CS引脚为低电平时,AIC23的I2C地址为0011010。在3种接口方式中,5410A都作为I2C总线上的主设备,AIC23作为I2C总线上的从设备。
使用MCBSP端口扩展通用I/O口时,每次都要先写入PCR寄存器的入口地址0EH,然后才能操作PCR寄存器。
2.3 使用HPI接口作为通用I/O模拟I2C接口
使用HPI接口和AIC23的I2C接口的原理如图7所示,在这里使用5410A的HD0和HD1引脚与AIC23的SCLK和SDIN引脚连接,HD1作为I2C的时钟,HD0作为I2C的数据线,要注意的是,必须把5410A的HPIENA引脚接地,才能将HPI端口作为通用I/O口使用。
使用HPI端口扩展通用I/O口时,首先要配置控制寄存器确定端口的输入/输出方式,然后再操作数据寄存器。
2.4 使用XIO2接口作为通用I/O模拟I2C接口
使用XI02接口和AIC23的I2C接口的原理如图8所示,在这里使用5410A的A0和D0引脚与AIC23的SCLK和SDIN引脚连接,A0作为I2C的时钟,D0作为I2C的数据线。需要注意的是:5410A的A0引脚只能作为输出,在这种情况下,5410A只能作为I2C总线上的主设备。
2.5 三种扩展方法的比较
上述介绍的3种方法中,使用MCBSP接口来扩展通用I/O口,有配置灵活,收发端口可以独立操作,最多4个引脚(BCLKR、BCLKX、BFSR和BFSX)可以作为双向I/O口的优点。但是从程序代码的长度也可以看到,编程比较烦琐,而且引脚数较少,使用起来不太方便,使用HPI接口来扩展通用I/O口,由于有专用的寄存器来控制通用I/O口扩展,具有配置灵活控制方便的优点,而且全部8个引脚都可以作为双向I/O口使用,但是HPI接口作为通用I/O口后,就不再具有HPI功能,如果I/O引脚需要不多,则会造成资源的浪费,而且在某些DSP芯片(如TMS320VC5410)上不支持HPI作为通用I/O口使用。使用XIO2接口扩展通用I/O口,具有引脚多(有38个引脚,)操作方便的优点,但是XIO2接口一般都是和SRAM或其他并行设备进行通信使用,复用XIO2接口作通用I/O口时要格外谨慎,而且作为I/O口时地址线只能单向输出,应用起来具有局限性,所以在扩展通用I/O口的时候,需要根据系统的需要选择扩展的方式。
结语
TI公司的C5000系列DSP多都没有专用的通用I/O引脚,本文介绍的3种方法可以有效地扩展DSP的通用I/O口,在设计时可以灵活地选择扩展方式,其中HPI扩展方式适用于支持扩展功能的芯片,MCBSP扩展方式和XIO2扩展方式适用于大多数C5000系列芯片,使用这些方法,可以省掉外围的控制电路和芯片,降低系统成本和功耗,具有较高的实用价值。
|