挂锁厂家
免费服务热线

Free service

hotline

010-00000000
挂锁厂家
热门搜索:
行业资讯
当前位置:首页 > 行业资讯

O口的多种扩展与I2C接口模拟

发布时间:2020-07-21 18:06:42 阅读: 来源:挂锁厂家

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系列芯片,使用这些方法,可以省掉外围的控制电路和芯片,降低系统成本和功耗,具有较高的实用价值。

广州吸脂

长春隆胸价格

济南面部填充医院

南昌植发价格