免费预览已结束,剩余31页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SPI接口 SPI(Serial Peripheral Interface-串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。SPI接口 SPI接口的全称是Serial Peripheral Interface,意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,地位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。SPI接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,其接口包括以下四种信号:(1)MOSI 主器件数据输出,从器件数据输入(2)MISO 主器件数据输入,从器件数据输出(3)SCLK 时钟信号,由主器件产生(4)/SS 从器件使能信号,由主器件控制在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。 多个从器件硬件连接示意图在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK的下降沿上数据改变,同时一位数据被存入移位寄存器。 通讯时序图SPI接口内部硬件图示:最后,SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。 接口内部硬件连接图SPI 接口: 简单不简单2008-03-29 04:25:58SPI 串行外设接口总线,最早由Motorola提出,出现在其M68系列单片机中,由于其简单实用,又不牵涉到专利问题,因此许多厂家的设备都支持该接口,广泛应用于外设控制领域。SPI接口是一种事实标准,并没有标准协议,大部分厂家都是参照Motorola的SPI接口定义来设计的。但正因为没有确切的版本协议,不同家产品的SPI接口在技术上存在一定的差别,容易引起歧义,有的甚至无法直接互连(需要软件进行必要的修改)。虽然SPI接口的内容非常简单,但本文仍将就其中的一些容易忽视的问题进行讨论。SPI ( Serial Peripheral Interface ) SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave模式应用,一般仅支持单Master。时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的水平。 SPI接口信号线SPI接口共有4根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。设备选择线SS-(Slave select,或CS-)SS-线用于选择激活某Slave设备,低有效,由Master驱动输出。只有当SS-信号线为低电平时,对应Slave设备的SPI接口才处于工作状态。SCLK:同步时钟信号线,SCLK用来同步主从设备的数据传输,由Master驱动输出,Slave设备按SCK的步调接收或发送数据。串行数据线:SPI接口数据线是单向的,共有两根数据线,分别承担Master到Slave、Slave到Master的数据传输;但是不同厂家的数据线命名有差别。Motorola的经典命名是MOSI和MISO,这是站在信号线的角度来命名的。MOSI:When master, out line; when slave, in lineMISO:When master, in line; when slave, out line比如MOSI,该线上数据一定是Master流向Slave的。因此在电路板上,Master的MOSI引脚应与Slave的MOSI引脚连接在一起。双方的MISO也应该连在一起,而不是一方的MOSI连接另一方的MISO。 不过,也有一些产家(比如Microchip)是按照类似SDI,SDO的方式来命名,这是站在器件的角度根据数据流向来定义的。SDI:串行数据输入SDO:串行数据输出这种情况下,当Master与Slave连接时,就应该用一方的SDO连接另一个方的SDI。由于SPI接口数据线是单向的,故电路设计时,数据线连接一定要正确,必然是一方的输出连接另一方的输入。其实这个问题本来很简单的,但由于不同厂家产品的命名习惯可能不同,因此还需小心,以免低级出错。数据传输的时序模式 为了适用不同产品接口应用需要,SPI接口定义了多种时序传输模式,并可通过设置接口单元寄存器中的相关控制位来选择。在Motorola的产品中,时序即是由两个控制位(极性控制、相位控制)来控制的。时钟极性选择位CPOL:在设备被使能激活后,还未进行数据传输时或两个字节数据传输间歇期间(见图3中的1与2处),SCLK处于空闲(Idle)电平,通过CPOL空闲状态极性控制位可以选择此空闲电平电平是0还是1。时钟相位选择位CPHA:该控制位用来选择数据接收端设备的采样时刻。可能在Idle to Active的跳变沿(见图3中的红色圈处),也可能在Active to Idle的跳变沿(见图3中的蓝色圈处)。在该采样时刻,线上数据必须已经稳定可靠,因此数据发送端设备应提前将数据移出到数据线上。为了降低设计难度,大部分接口电路都是用同一时钟周期中前一个时钟沿(即相反时钟变化方向)将数据移出。SPI线上的Master,Slave设备必须根据具体情况设置匹配的传输时序模式,时序只有匹配,数据传输才能正常进行。如果设置的不匹配,可能导致数据接收方和发送方在同一时钟沿作用,导致数据传输失败。我们以手机设计中非常流行的触摸屏控制器TSC2046为例,介绍SPI接口的实际应用。由于TSC2046采样触摸屏信息并量化出最高位需要一定时间,而SPI总线没有握手机制,为避免Master过早的启动传输,接收无效数据,TSC2046引入了BUSY信号作为TSC2046向Master的指示。TSC2046是在时钟的第一个Idle to Active沿采集数据(下图1处),而在第一个(下一字节)Active to Idle 沿开始移出数据(下图2处),这导致Master只能在第二个dle to Active沿采集到的数据才是有效的(下图3处),而在第一个Idle to Active沿(下图1处)采集的数据是无效的,因此在软件中需要将该Bit丢弃。可见,必须根据Master与Slave的实际时序进行匹配,软件也需要进行对应的调整,才能保证数据传输的正常进行。多Slave的应用SPI也支持多Slave应用。多个Slave共享时钟线、数据线,可以直接并接在一起;而各Slave的片选线SS则单独与Master连接,受Master控制。在一段时间内,Master只能通过某根SS线激活一个Slave,进行数据传输,而此时其他Slave的时钟线和数据线端口则都应保持高阻状态,以免影响当前数据传输的进行。SPI Vs I2CSPI协议没有定义寻址机制,需通过外部SS信号线选择设备,当出现多slave应用时,需要多根SS信号线,实施起来较I2C要复杂。此外,SPI总线不支持总线控制权仲裁,故只能用在单Master的场合;而I2C可以支持多Master的应用。SPI 协议相对I2C要简单,没有握手机制,数据传输效率高,速率也更快,通常应用中可达几Mbps;此外SPI是全双工通信,可同时发送和接收数据,因此,SPI比较适合用于数据传输的场合。比如需要较大批量数据传输的场合(比如MMC/SD卡的数据传输就支持SPI模式),或者无需寻址传输的场合。而I2C协议功能较丰富,但也相对复杂,多用在传输一些控制命令字等有意义数据的场合。比如TSC2046只有一个控制寄存器(一个8bit的命令字),使用SPI接口即可控制,因为无需寻址。而OV的Cmos Sensor内有多个控制寄存器,此时就必须使用I2C接口才能实现寻址控制(哦,确切的是SCCB,一个很像I2C的东东)。SPI接口属于一种非常基本的外设接口,但是应用却很广泛。SPI也有所发展,比兔NS推出的SPI的精简接口Microwire,满足通常外设的扩展需求。Motorola还推出了扩展功能的QSPI(Queued SPI)接口,应用更为广泛。(原创文章 转载请注明来自 手机设计串行接口SPI接口应用设计作者:马潮老师 / 整理:armok / 2005-01-17/ www.OurAVR.com使用的同步串行三线SPI接口,可以方便的连接采用SPI通信协议的外围或另一片AVR单片机,实现在短距离内的高速同步通信。ATmega128的SPI采用硬件方式实现面向字节的全双工3线同步通信,支持主机、从机和2种不同极性的SPI时序,通信速率有7种选择,主机方式的最高速率为1/2系统时钟,从机方式最高速率为1/4系统时钟。 ATmega128单片机内部的SPI接口也被用于程序存储器和数据E2PROM的编程下载和上传。但特别需要注意的是,此时SPI的MOSI和MISO接口不再对应PB2、PB3引脚,而是转换到PE0、PE1引脚上(PDI、PDO),其详见第二章中关于程序存储器的串行编程和校验部分的内容。 ATmega128的SPI为硬件接口和传输完成中断申请,所以使用SPI传输数据的有效方法是采用中断方式+数据缓存器的设计方法。在对SPI初始化时,应注意以下几点: .正确选择和设置主机或从机,以及工作模式(极性),数据传输率; .注意传送字节的顺序,是低位优先(LSB First)还是高位优先(MSB Frist); .正确设置MOSI和MISO接口的输入输出方向,输入引脚使用上拉电阻,可以节省总线上的吊高电阻。 下面一段是SPI主机方式连续发送(接收)字节的例程:#define SIZE 100 unsigned char SPI_rx_buffSIZE; unsigned char SPI_tx_buffSIZE; unsigned char rx_wr_index,rx_rd_index,rx_counter,rx_buffer_overflow; unsigned char tx_wr_index,tx_rd_index,tx_counter; #pragma interrupt_handler spi_stc_isr:18 void spi_stc_isr(void) SPI_rx_buffrx_wr_index = SPDR; /从ISP口读出收到的字节 if (+rx_wr_index = SIZE) rx_wr_index = 0; /放入接收缓冲区,并调整队列指针 if (+rx_counter = SIZE) rx_counter = 0; rx_buffer_overflow = 1; if (tx_counter) /如果发送缓冲区中有待发的数据 -tx_counter; SPDR = SPI_tx_bufftx_rd_index; /发送一个字节数据,并调整指针 if (+tx_rd_index = SIZE) tx_rd_index = 0; unsigned char getSPIchar(void) unsigned char data; while (rx_counter = 0); /无接收数据,等待 data = SPI_rx_buffrx_rd_index; /从接收缓冲区取出一个SPI收到的数据 if (+rx_rd_index = SIZE) rx_rd_index = 0; /调整指针 CLI(); -rx_counter; SEI(); return data; void putSPIchar(char c) while (tx_counter = SIZE);/发送缓冲区满,等待 CLI(); if (tx_counter | (SPSR & 0x80) = 0)/发送缓冲区已中有待发数据 /或SPI正在发送数据时 SPI_tx_buffertx_wr_index = c; /将数据放入发送缓冲区排队 if (+tx_wr_index = SIZE) tx_wr_index = 0; /调整指针 +tx_counter; else SPDR = c; /发送缓冲区中空且SPI口空闲,直接放入SPDR由SIP口发送 SEI(); void spi_init(void) unsigned chat temp; DDRB |= 0x080; /MISO=input and MOSI,SCK,SS = output PORTB |= 0x80; /MISO上拉电阻有效 SPCR = 0xD5; /SPI允许,主机模式,MSB,允许SPI中断,极性方式01,1/16系统时钟速率 SPSR = 0x00; temp = SPSR; temp = SPDR; /清空SPI,和中断标志,使SPI空闲 void main(void) unsigned char I; CLI(); /关中断 spi_init(); /初始化SPI接口 SEI(); /开中断 while() putSPIchat(i); /发送一个字节 i+; getSPIchar(); /接收一个字节(第一个字节为空字节) 这个典型的SPI例程比较简单,主程序中首先对ATmega128的硬件SPI进行初始化。在初始化过程中,将PORTB的MOSI、SCLK和SS引脚作为输出,同时将MISO作为输入引脚,并打开上拉电阻。接着对SPI的寄存器进行初始化设置,并空读一次SPSR、SPDR寄存器(读SPSR后再对SPDR操作将自动清零SPI中断标志自动清零),使ISP空闲等待发送数据。 AVR的SPI由一个16位的循环移位寄存器构成,当数据从主机方移出时,从机的数据同时也被移入,因此SPI的发送和接收在一个中断服务中完成。在SPI中断服务程序中,先从SPDR中读一个接收的字节存入接收数据缓冲器中,再从发送数据缓冲器取出一个字节写入SPDR中,由ISP发送到从机。数据一旦写入SPDR,ISP硬件开始发送数据。下一次ISP中断时,表示发送完成,并同时收到一个数据。类似本章介绍的USART接口的使用,程序中putSPIchar()和getSPIchar()为应用程序的底层接口函数(SPI驱动程序是SPI中断服务程序),同时也使用了两个数据缓冲器,分别构成循环队列。这种程序设计的思路,不但程序的结构性完整,同时也适当的解决了高速MCU和低速串口之间的矛盾,实现程序中任务的并行运行,提高了MCU的运行效率。 本例程是通过SPI批量输出、输入数据的示例,用户可以使用一片ATmega128,将其MOSI和MISO两个引脚连接起来,构成一个ISP接口自发自收的系统,对程序进行演示验证。需要注意,实际接收到的字节为上一次中断时发出的数据,即第一个收到的字节是空字节。 读懂和了解程序的处理思想,读者可以根据需要对程序进行改动,适合实际系统的使用。如在实际应用中外接的从机是一片SPI接口的温度芯片,协议规程为:主机先要连续发送3个字节的命令,然后从机才返回一个字节的数据。那么用户程序可以先循环调用putSPIchar()函数4次,将3个字节的命令和一个字节的空数据发送到从机,然后等待一段时间,或处理一些其它的操作后,再循环调用getSPIchar()函数4次,从接收数据缓冲器中连续读取4个字节,放弃前3个空字节,第4个字节即为从机的返回数据了。 ISD4004语音芯片资料说明及其应用实例(含程序驱动) 收藏 *spi isd4004.h*/i nclude reg51.hi nclude intrins.h sbit _cs = p00;sbit _sclk= p03;sbit _mosi= p01;sbit _miso= p02;sbit _rac = p04;sbit _int = p05;void delay(unsigned int i) /延时程序 while(i-);void stopmode() /停止 unsigned char m,i,j; _cs=1; _sclk=0; _cs=0; m=0x30; for(i=0;i8;i+) m=_cror_(m,1); j=m1; _mosi=cy; _sclk=0; _sclk=1; _cs=1;void powerdown() /下电 unsigned char m,i,j; _cs=1; _sclk=0; _cs=0; m=0x10; for(i=0;i8;i+) m=_cror_(m,1); j=m1; _mosi=cy; _sclk=0; _sclk=1; _cs=1;void powerup() 上电 unsigned char m,i,j; _cs=1; _sclk=0; _cs=0; m=0x20; for(i=0;i8;i+) m=_cror_(m,1); j=m1; _mosi=cy; _sclk=0; _sclk=1; _cs=1;void record4004(unsigned int address) 录音 address-录音地址 0-2400 unsigned char i,m,j; unsigned int datasoute=0; powerup(); delay(5118);/上电延时 powerup(); delay(5118);/上电延时 delay(5118);/上电延时 _cs=1; _sclk=0; m=0xa0; _cs=0; for(i=0;i16;i+) address=_iror_(address,1); datasoute=address1; _mosi=cy; _sclk=0; _sclk=1; for(i=0;i8;i+) m=_cror_(m,1); j=m1; _mosi=cy; _sclk=0; _sclk=1; _cs=1; _sclk=0; m=0xb0; _cs=0; for(i=0;i8;i+) m=_cror_(m,1); j=m1; _mosi=cy; _sclk=0; _sclk=1; _cs=1; p0=0xff; datasoute=0; while(_int=1) /存储地址换行标志 if(_rac) delay(20000); datasoute+; /记录本次录音所占的行数(也就是本次录音有多大) / / 在这里应该加上自己的程序,就是录音退出程序 / /while end;void audioout(unsigned int address) /放音程序 unsigned char i,m,j; unsigned int datasoute; powerup(); _cs=1; _sclk=0; _cs=0; m=0xe0; for(i=0;i16;i+) address=_iror_(address,1); datasoute=address1; _sclk=0; _mosi=cy; _sclk=1; for(i=0;i8;i+) m=_cror_(m,1); j=m1; _sclk=0; _mosi=cy; _sclk=1; _cs=1; _sclk=0; m=0xf0; _cs=0; for(i=0;i8;i+) m=_cror_(m,1); j=m1; _sclk=0; _mosi=cy; _sclk=1; _cs=1; p0=0xff; while(_int=1) /while end;main() record4004(0); audioout(0); while(1);摘要:ISD4044 是一种采用ChipCorder 专利技术的语音芯片。此芯片无须A/D 转换和压缩就可以直接储存,没有A/D 转换误差,在一个记录位(BIT)可存储250级声音信号,相当于通常的A/D 记录的8 倍。片内集成了晶体振荡器、麦克前置放大器、自动增益控制等,只要很少的外围器件,就可以构成个完整声音录放系统。本文介绍了ISD4004 的原理、特点、功能及其在智能控制系统中的应用。关键词:ISD4004 单片机 89C511 概述ISD4004 是美国ISD 公司制造的一种新款语音芯片。与ISD 其它系列语音产品不同的是,ISD4004是一种微控制器“从”设备,而“主”控制器可以是内置有SPI 兼容接口的微控制器,也可以用I/O 仿真SPI通信协议。ISD4004 系列工作电压为3V,单片录放时间为816 分钟,音质好,适用于移动电话及其它便携式电子产品中。该芯片采用CMOS 技术,内含振荡器、抗混叠滤波器、平滑滤波器、音频放大器、自动静噪及高密度多电平闪烁存贮陈列。芯片的所有操作必须由微控制器控制,操作命令可通过串行通信接口(SPI 或Microwire)送入。ISD4004 采用多电平直接模拟量存储技术,每个采样值直接存贮在片内闪烁存贮器中,因此能非常真实、自然地再现语音、音调和效果声,避免了一般固体录音电路因量化和压缩造成的量化噪声和“金属声”。采样频率可为4.0,5.3,6.4,8.0kHz,频率越低,录放时间越长,音质则有所下降, 片内信息存于闪烁存贮器中,可在断电情况下保存100 年(典型值),反复录音10万次。2 引脚功能描述ISD4004 的引脚排列如图1 所示,各引脚功能如下:电源(VCCA,VCCD):为使噪声最小,芯片的模拟和数字电路使用不同的电源总线,并且分别引到外封装的不同管脚小,模拟和数字电源端最好分别走线。尽可能在靠近供电端处相连,而去耦电容应尽量靠近器件。地线(VSSA,VSSD):芯片内部的模拟和数字电路也使用不同的地线。同相模拟输入(ANA IN+):录音信号 的同相输入端。输入放大器可用单端或差分驱动。单端输入时,信号由耦合电容输入,最大幅度为峰峰值32mV,耦合电容和本端的3k 电阻输入阻抗决定了芯片频带的低端截止频率。差分驱动时,信号最大幅度为峰峰值16mV,与ISD33000 系列相同。反相模拟输入(ANA IN-):差分驱动时,为录音信号的反相输入端。信号通过耦合电容输入,最大幅度为峰峰值16mV。音频输出(AUD OUT):提供音频输出,可驱动5k 的负载。片选(SS):此端为低,即向该ISD4004 芯片发送指令,两条指令之间为高电平。串行输入(MOSI):此端为串行输入端,主控制器应在串行时钟上升沿之前半个周期将数据放到本端,供ISD 输入。串行输出(MISO):ISD 的串行输出端。ISD 未选中时,本端呈高阻态。串行时钟(SCLK):ISD 的时钟输入端,由主控制器产生,用于同步MOSI 和MISO 的数据传输。数据在SCLK 上升沿锁存到ISD,在下降沿移出ISD。中断(INT):本端为漏极开路输出。ISD 在任何操作(包括快进)中检测到EOM或IVF 时,本端变低并保持。中断状态在下一个SPI 周期开始时清除。中断状态也可用RINT 指令读取。OVF 标志用来指示ISD 的录、放操作已到达存储器的末尾。只在放音中检测到内部的EOM 标志时,此状态位才置1。行地址时钟(RAC):漏极开路输出。每个RAC 周期表示ISD 存储器的操作进行了一行(ISD4004系列中的存贮器共2400 行)。该信号保持高电平的时间为175ms,低电平时间为25ms。在快进模式,RAC 可保持高电平218.75s,低电平31. 25s。该端可用于存储管理技术。3 工作原理与功能特性ISD4004 声音录放采用CchipCorder 专利技术,即无须A/D 转换和压缩就可以直接储存,没有A/D转换误差,在个记录位(BIT)可存储250 级声音信号,相当于通常的A/D 记录的8 倍。3.1 SPI(串行外设接口)ISD4004 工作于SPI 串行接口。SPI 协议是一个同步串行数据传输协议,该协议假定微控制器的SPI移位寄存器在SCLK 的下降沿工作,因此对于ISD4004 而言,在时钟上升沿将锁存MOSI 引脚的数据,而在下降沿则将数据送至MISO 引脚。3.2 SPI 接口指令SPI 的接口指令如表1 所列。表1 SPI 的接口指令3.3 SPI 端口的控制位SPI 端口控制位如图2 所示。3.4 SPI 控制寄存器SPI 控制寄存器控制器件可以实现如录放、录音、信息检索(快进)、上电/掉电、开始和停止操作、忽略地址指针等功能。具体控制位如表2 所列。当IAB 置0 时,录、放操作从A9A0 地址开始。为了能连贯地录、放到后续的存储空间,在操作到达该行末之前,应发出第二个SPI 指令将IAB 置1,否则器件在同一个地址上将反复循环。这一点对语音提示功能很有用。RAC 脚和IAB 位可用于信息管理。4 在智能控制中的典型应用本系统是以单片机,语音处理芯片及报警传感器为基础,利用公共电话网络建立起来的智能家居服务系统。它具有以下主要功能:(1)家电控制功能:打电话在通过密码校验后,在语音的提示下,进行远程控制家电、查询其工作状态及家电定时操作。(2)电话录音功能:可来电留主及用户自己录音(3)自动语音报警功能:在无的情况下,监控系统检测到非法闯入,能自动拔打报警电话。在叫通后,能接报警信息以语音的形式发送出去。由上可以看到,在整个家居服务系统中,要多次实现语音提示,应答,查询等功能。这些功能的实现是靠单片机89C51 与ISD4004 之间的通讯来完成的。89C51 与ISD4004 的连接如图3 所示图中,ISD4004 的13 管脚是模拟语音信号的输出端,输出的语音信号通过LM386 功率放大器放大,然后经过变压器耦合到电话线上。MIC 是麦克风,即语音信号的输入端,输出的模拟语音信号通过三极管组成放大器加到ISD4004 语音芯片的输入端。该系统的录音子程序如下:LUYIN: ;用户录音子程序MOV R0,# # # # # # # # # #ACALL FAST ;语音提示如何修改JB P3.5,$MOV A,#20H ;语音芯片上电ACALL ISDXSETB P1.0ACALL YS50 ;上电延时ACALL YS50MOV A,# # # # #;“# # # # # #”表示是录音具体地址ACALL ISDX ;置录音地址MOV A,#0A0HACALL ISDXSETB P1.0LUY1:MOV R1,#20H ;录音开始LUY2:ACALL YS50DJNZ R1,LUY2MOV A,#0B0H ;录音ACALL ISDXSETB 1.0JNB P3.3,$LUY9:MOV A,#30HACALL ISDXSETB P1.0LUY3:MOV R5,#10HLUY5:JNB P1.4,LUY4 ;检查录音是否超时JNB P3.5,LUY3DJNZ R5,LUY5MOV A,#30H ;录音停止ACALL ISDXSETB P1.0LUY6:MOV R4,#0FFHLUY7:MOV R5,#0FFHLUY8:MOV R6,#0FFHLUYA:JNB P3.5,LUY9DJNZ R6,LUYADJNZ R5,LUY8DJNZ E4,LUY7SJMP GUANJILUY4:MOV R0,# # # # # #;“录音超过,请重录制”ACALL FSATSJMP LUYIN放音子程序:FANGYI:MOV R0,# # # # # #;“提示放音程序开始工作”ACALL FASTFANGY2:MOV R1,#0FFHFANGY3:MOV R2,#0FFHFANGY4:MOV A,#0FFHMOV P0,ASETB P0.7SETB P0.4CLR P0.5SETB P0.6MOV A,P0 ;读8880 状态寄存器JB ACC.2,FANGY6FANGY6:DJNZ R2,FANGY4DJNZ R1,FANGY3SJMP GUANJICLR P0.4MOV A,P0 ;读8880 接收数据寄存器ANL A,#0FH ;屏蔽高四位CJNE A,#02H,FANGYI;查询是否“2”键按下,是则放音FANGY5:MOV A,#0FFHMOV P0,ASETB P0.7SETB P0.4CLR P0.5SETB P0.6MOV A,P0JNB ACC.2,FANGY5MOV R0,# # # # #ACALL FASTINC R0SJMP FANGY2本文来自CSDN博客,转载请标明出处:/hxq_10/archive/2009/12/10/4981301.aspxisd4004应用电路ISD4004系列工作电压3V,单片录放时间8至16分钟,音质好,适用于移动电话及其他便携式电子产品中。芯片采用CMOS技术,内含振荡器、防混淆滤波器、平滑滤波器、音频放大器、自动静噪及高密度多电平闪烁存贮陈列。芯片设计是基于所有操作必须由微控制器控制,操作命令可通过串行通信接口(SPI或Microwire)送入。芯片采用多电平直接模拟量存储技术, 每个采样值直接存贮在片内闪烁存贮器中,因此能够非常真实、自然地再现语音、音乐、音调和效果声,避免了一般固体录音电路因量化和压缩造成的量化噪声和金属声。采样频率可为 4.0,5.3,6.4,8.0kHz,频率越低,录放时间越长,而音质则有所下降,片内信息存于闪烁存贮器中,可在断电情况下保存100年(典型值),反复录音10万次。语音录放模块的硬件电路如图3所示。MK1为麦克风,用于录入语音,可完成普通的现场录音。在放音电路中,输出端选用低电压通用集成功率放大器LM386M-1的典型应用电路作为扬声器LS1的驱动电路。该典型电路中,LM386M-1的1脚和8脚间外接10F的旁路电容,可以使电路的放大倍数提高200倍。ISD4004的工作电压是3V,可以通过变压电路将5V电压转变为3 V,转换电路如图4所示。 一种基于单片机控制的ISD4004语音芯片应用电路发布日期:2005-11-06作者:冯志慧 许利军 薛鹏涛 翁梅 余华 周志强 来源:微计算机信息 摘要:ISD4004语音系列芯片是美国ISD公司推出的产品,具有多次重复录放,存储时间长,使用时不需扩充存储器,所需外围电路简单等特点。本文将结合ISD4004芯片在语音报站器中的一个实际应用,对其功能和使用方法做一简单介绍,从而使读者对ISD4004系列语音芯片的使用有个初步的了解。关键字:1SD4004 单片机89C52 1 前言 ISD4004语音芯片是由美国ISD公司推出不久的新产品。关于该语音芯片的引脚说明以及内部电路等,因为很容易在ISD公司提供的芯片资料中查到,笔者就不在本文作过多的描述。只简单对其特点做一介绍。 与普通的录音/重放芯片相比,ISD4004具有如下特点:首先是记录声音没有段长度限制,并且声音记录不需要A/D转换和压缩。其次,快速闪存作为存储介质,无需电源可保存数据长达100年,重复记录10000次以上。此外,ISD4004具有记录时间长(可达16分钟,本文采用的为8分钟的ISD4004语音芯片)的优点。最后,ISD4004开发应用具有所需外围电路简单的优点,这一点从本文介绍的其在语音报站器中的实际应用中可以体会到。2 硬件电路设计 在目前市场上流通的语音报站器,大多采用的不是ISD4004系列的芯片。这固然由于ISD4004推出不久以及其价格偏高有关。但随着ISD4004应用的增多以及价格的回落,再加上ISD4004系列芯片本身又具有的多次重复录放、自带存储器、使用简单等优点。可以相信,在语音报站器中采用ISD4004系列语音芯片也是完全可行的。笔者设计了该装置的硬件电路并进行了上车调试,取得了较为满意的效果。 本文讨论的语音报站器主要是指装在车上的放音电路,不包含录音电路,在实际应用中由录音电路完成报站内容的录音工作,并存储到语音芯片中。本文主要结合ISD4004在放音电路中的使用来介绍ISD4004的典型应用。2.1 硬件电路图 本文讨论的报站器主电路主要由单片机89C52和ISD4004构成。该系统的硬件电路连接如图1所示:图1 本系统可以主要分为三部分。单片机控制部分、放音部分和显示部分。本文的显示电路采用的是通过P3.0,P3.1控制的两个7段数码管的静态显示,在此不作详细介绍。控制部分则主要由单片机89C52构成,包含必要的按键电路、复位电路和看门狗电路等外围电路。放音部分主要由ISD4004构成,包含配套的变压电路,功放电路等。 从图中可以看出89C52和ISD4004之间的连接较少,单片机的P1.0P1.3引脚接按键,控制报站器工作过程中的放音与否和放音内容。P1.6接ISD4004的片选引脚/SS,控制ISD4004的选通与否。P1.7接ISD4004的串行输入引脚MOSI,从该引脚读入放音的地址。P3.0,P3.1控制外围显示电路,在报站器工作过程中显示出当前的站号。P3.2和P3.3分别接ISD4004的串行时钟引脚SCLK和中断引脚/INT。对于ISD4004芯片所需要的连接还有音频信号输出引脚AUDOUT,该引脚通过一个滤波电容与扬声器连接,AMCAP为自动静音端,使用时通过一个电容接地。此外由于ISD4004的工作电压为3伏,而单片机所需供电电压为5伏,因此需要采用变压电路得到3伏电压供ISD4004使用。3 软件设计3.1 程序流程图 如图2所示:图23.2 程序工作思想 电路上电后,程序首先完成程序的初始化,随后查询按键状态,进入系统待机状态。如果有按键按下,则转去执行该按键指向的工作程序。按键包括放音键,停止键,加一,减一键以及特殊语键。在待机状态下,如果放音键首次被按下,程序将首先判断是去还是回(公交车路径一般是既去又回的),并点亮相应的指示灯。自动读出第一站的放音内容,站号显示1。如果不是首次按下,程序则首先判断当前站号,并以该站号为依据获得存放该站放音内容的首地址。调用放音子程序,读入前面获得的本站放音内容首地址,开始放音。每一句放音完毕后,ISD4004的中断引脚(25脚)会自动送一低电平信号。在硬件设计中,该引脚与单片机的P3.3连接。因此,会引起一次中断,在中断子程序中会有一个计数器记录中断次数,从而判断何时一站结束,站号加一并刷新显示。加一键按下后则使程序放音内容转向下一站,减一键则使程序放音内容转向上一站,相应的站号显示也将随之刷新。特殊语键按下后,程序转向执行特殊语放音(譬如拐弯请注意等语句)。停止键被按下将中止当前的放音状态。3.3 部分工作子程序 为了便于读者对ISD4004应用的理解,本文给出了部分操作程序。该部分程序主要完成放音操作,把获得的放音内容的地址送到ISD4004中,完成放音。下面给出的就是放音部分程序。放音子程序:PLAY:ACALL POWERUP ;上电子程序 ACALL DELAY25 ;延迟子程序,至少延迟25ms CLR P1.6 ;选中ISD4004 MOV PLAY2,#11100000B ;存放SETPLAY命令 MOV A,PLAY0 ;送放音地址低8位 ACALL SEND ;调用送地址子程序 MOV A,PLAY1 ;送放音地址高8位 ACALL SEND MOV A,PLAY2 ;送SETPLAY命令 ACALL SEND SETB P1.6 CLR P1.6 MOV PLAYING,#11110000B ;送入放音指令 MOV A,PLAYING ACALL SEND SETB P1.6 RETPOWERUP: ;送上电指令子程序 MOV POWING,#00100000B ;送入语音芯片上电信号 MOV A,POWUPING CLR P1.6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 漳州职业技术学院《跨文化交流》2024-2025学年第一学期期末试卷
- 湖南长沙县三中2026届高二上物理期末统考模拟试题含解析
- 2025-2026学年山东省微山二中化学高二第一学期期末考试模拟试题含解析
- 潇湘职业学院《Oacle数据库》2024-2025学年第一学期期末试卷
- 2026届新疆生产建设兵团农八师一四三团第一中学高二化学第一学期期末综合测试模拟试题含解析
- 2024年山东辅警招聘考试题库含答案详解(综合题)
- 2026届安徽省亳州市第十八中学数学高二第一学期期末统考试题含解析
- 试卷越容易(3篇)
- 河北省秦皇岛市昌黎汇文二中2026届高二上物理期末调研模拟试题含解析
- 四川省广安市武胜烈面中学校2025-2026学年高二物理第一学期期末检测模拟试题含解析
- 聚氯乙烯未来发展趋势报告
- 生源地就业调查报告
- 写小狗的说明文
- 室内空间手绘表现技法高职全套教学课件
- 《义务教育数学课程标准(2022年版)》解读
- 广东省法院通讯录
- 某证券公司财务信息系统建立方案
- GB/T 700-2006碳素结构钢
- GB/T 6144-1985合成切削液
- 人保财险首台套重大技术装备综合保险条款
- 产品质量法-产品质量法课件
评论
0/150
提交评论