基于8051F330的音频信号发生器的设计与实现
扫描二维码
随时随地手机看文章
目前,单片机系统以价格低廉、开发环境完备、开发工具齐全、应用资料众多、功能强大且程序易于移植等优点而得到广泛应用。同时,随着信息化进程、计算机科学与技术以及信号处理理论与方法的迅速发展,需要的数据量越来越大,对数据存储也提出了更高要求。MMC/SD卡以其价格、体积、读取速度等特点成为现今大多数便携式嵌入式设备的首选。
2 系统结构及原理
基于8051F330的音频信号发生器的系统结构如图1所示,它主要由8051F330单片机、MMC/SD卡存储器、RS232串行通信接口、上位机、液晶显示、键盘以及信号调理电路等部分组成。将写入MMC/SD卡中的音频数据存储在上位机,单片机通过RS232串行通信接口写入MMC/SD卡,以中断方式读取键盘接口命令,并根据命令控制选择相应的音频信号数据,再由信号调理电路输出不同频率和强度的音频信号,系统通过液晶显示模块显示信号频率、信号强度及信号类型。该系统突出的特点是上位机采用Lab Windows/CVI软件,通过RS232串行通信接口与单片机通讯;以文本格式存储在上位机的音频信息则通过RS232串行通信接口下载到MMC/SD卡。
系统控制核心选用美国Cygnal公司的8051F330单片机,C8051F330微控制器采用独特的CIP-8051架构,对指令运行实行流水作业,大大提高了指令的运行速度;采用多功能存储卡-MMC/SD卡作为存储介质。MMC/SD卡内置控制电路,可应用于手机、数码相机、MP3等多种数字设备,反复记录30万次,具有较高的性价比;液晶显示屏采用OCM12864点阵液晶显示模块,由单片机时序控制,具有8位数据线、6条控制线和电源线。
3 硬件设计
3.1 MMC/SD卡接口电路
MMC/SD卡在音频信号发生器系统中是以数字量形式存储音频信息。MMC/SD卡有两种工作模式,即MMC/SD模式和SPI模式。从实际应用角度出发,SPI模式设计简单,操作方便,但数据传输速率不如MMC/SD模式,本系统采用SPI模式。MMC/SD卡工作在SPI模式下,其各个引脚功能的定义,如表1所示。CS是MMC/SD卡的片选线,在SPI模式下,CS必须保持低电平有效;DI不但传输数据,还发送命令,传输方向是由单片机到MMC/SD卡;同样DO除了发送数据外还传送应答信号,传输方向是由MMC/SD卡到单片机;SCLK是操作MMC/SD卡的时钟线。将C8051F330的相应交叉开关配置为SPI模式,与MMC/SD卡对应的引脚连接。针对SPI总线线路上增加了上拉电阻。MMC/SD卡与单片机接口电路。如图2所示。
3.2 上位机和单片机通信
上位机采用Lab Windows/CVI软件通过串口向单片机发送音频信息。单片机将接收到的信息数据写入MMC/SD卡。Lab Windows/CVI软件的音频信息是由WinHex软件将原始文件转换成16进制的数字量,该软件可对多种语音信号进行转换。上位机与单片机的通信是通过RS232串口通讯器件完成的。当上位机与音频信号发生器相距较远.不能直接用RS232器件将其连接时,可将RS232转换为CAN,通过CAN总线实现串口设备的网络互联。RS232标准电平采用负逻辑,规定+3 V~+15 V的任意电平为逻辑“0”电平,-3 V~-15 V的任意电平为逻辑“1”电平。而CAN信号则使用差分电压传输,2条信号线称为“CAN_H”和“CAN_L”,静态时均为2.5 V,此时状态表示为逻辑“1”,也可称为“隐性”;CAN_H比CAN_L高时表示逻辑“0”,称为“显性”。显性时,通常为:CAN_H=3.5 V,CAN_L=1.5 V。
RS232串口的帧格式:1位起始位,8位数据位,1位可编程的第9位(此位为发送和接收的地址/数据位),1位停止位。而CAN的数据帧格式:帧信息+ID+数据(分为标准帧和扩展帧两种格式)。
3.3 信号调理电路
存储在MMC/SD卡中的数据是音频信号发生器的源代码。单片机将这些数据从MMC/SD卡中读出,经过单片机内部数模转换,以模拟量的形式从P01输出。该模拟信号经信号调理电路可外接耳机或音响播放十几种音律。信号调理电路如图3所示。由P01输出的信号经LM324放大后,由多个LM324并联实现信号跟随和功率驱动。图中只画出了2个跟随器,实际应用中根据需要可以并联10多个信号跟随器。
4 软件设计
4.1 系统初始化
系统初始化可完成C8051F330的I/O口、晶体振荡器、SPI总线和C8051F330片上串口的初始化设置。用C语言编写的程序代码如下:
4.2 MMC/SD卡初始化
MMC/SD卡上电后默认为MMC/SD模式,要使MMC/SD卡工作在SPI模式下,在MMC/SD卡初始化时,当片选线(CS)被拉低时发送复位命令CMD0,如收到应答信号01H,表示已将卡置为闲置状态;如收到应答信号不是01H,则表示出错。然后向MMC/SD卡发送命令CMD1,收到正确的应答信号00H之后,才会使MMC/SD卡进入SPI模式。MMC/SD卡初始化流程如图4所示。
MMC/SD卡协议是一种问答式协议。首先单片机发送CMD。接着由MMC/SD卡发送回应RES。MMC/SD卡的命令长度都是6字节,命令总是以左边的起始位开始,右边的结束位结束。其具体的命令格式如表2所示,MMC/SD卡的应答格式分为4种,分别是R1、R1b、R2和R3应答。
4.3 MMC/SD卡单块写数据
MMC/SD卡单块写数据主要实现C8051F330对MMC/SD卡的单块写操作。MMC/SD卡块的默认大小为512字节。当MMC/SD卡接收到单块写命令CMD24后,MMC/SD卡向单片机发送应答命令,并且等着单片机发送数据块。当应答命令R1为0时,说明可以发送512个字节数据。MMC/SD卡对接收到的数据块都通过一个l字节长的命令确认,当其低5位二进制数据为00101时,数据块才确认数据块写入MMC/SD卡。在数据块发送中,共发送515个字节数据,其中,第一个字节为0xFE,随后是512字节的用户数据块,最后是2个字节的CRC。单块数据写入MMC/SD卡的流程图如图5所示。
采用C语言编写的程序代码如下:
5 结束语
根据MMC/SD卡的SPI协议,采用单片机实现与MMC/SD卡的接口,解决了嵌入式系统大容量数据存储问题,利用上位机可以方便的读取写入数据。本系统的存储速度可达20 Mb/s,完全满足信号发生器所需的下载速度和音频播放速度。所编写的MMC/SD卡驱动程序已经应用到嵌入式信号发生器系统中,实现了数据的安全、稳定的存储。相对于MMC/SD卡无论是读写速度还是存储容量都得到了极大提高。在SPI模式下,SD卡与MMC卡相兼容,即就是说SD卡程序也适用于MMC卡。