大学课程设计报告音频信号发生器设计人:付路专业:电子信息工程班级:电子111501 学号:201115020104 指导教师:宁爱平二零一四年目录一.引言--------------------------------------------第2页二.系统结构及原理-----------------------------------第2页三.硬件设计----------------------------------------第3页3.1 MMC/SD卡接口电路-----------------------------第3页3.2 上位机和单片机通信---------------------------第4页3.3 信号调理电路---------------------------------第5页四.软件设计----------------------------------------第7页4.1 系统初始化----------------------------------第7页4.2 MMC/SD卡初始化------------------------------第7页4.3 MMC/SD卡单块写数据--------------------------第8页五.结束语-----------------------------------------第11页一.引言目前,单片机系统以价格低廉、开发环境完备、开发工具齐全、应用资料众多、功能强大且程序易于移植等优点而得到广泛应用。
同时,随着信息化进程、计算机科学与技术以及信号处理理论与方法的迅速发展,需要的数据量越来越大,对数据存储也提出了更高要求。
MMC/SD卡以其价格、体积、读取速度等特点成为现今大多数便携式嵌入式设备的首选。
二.系统结构及原理音频信号发生器的系统结构如图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.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.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语言编写的程序代码如下:#include "scancode.h"#define TIM *(int *)0x24#define PRD *(int *)0x25#define TCR *(int *)0x26#define IMR *(int *)0x0#define IFR *(int *)0x1#define PMST *(int *)0x1d#define SPSA0 *(unsigned int *)0x38#define SPSD0 *(unsigned int *)0x39#define SPSA1 *(unsigned int *)0x48#define SPSD1 *(unsigned int *)0x49#define nMusicNumber 40#define REGISTERCLKMD (*(unsigned int *)0x58) #define WAITSTATUS (*(unsigned int *)0x28)ioport unsigned char port8000;ioport unsigned char port8001;ioport unsigned char port8002;ioport unsigned char port8007;#define CTRGR port8000#define CTRKEY port8001#define CTRCLKEY port8002#define CTRLR port8007void Delay(unsigned int nTime);void interrupt time(void);// 音符数据unsigned int music[nMusicNumber][2]={{182,480},{151,480},{135,480},{121,480},{135,480},{151,4 80},{182,480},{0,480},{182,480},{151,480},{135,480},{121,480},{135,480},{151,4 80},{182,480},{0,480},{182,240},{151,240},{135,240},{121,240},{135,240},{151,2 40},{182,240},{0,240},{182,240},{151,240},{135,240},{121,240},{135,240},{151,2 40},{182,240},{0,240},{182,1920},{151,1920},{135,1920},{121,1920},{135,1920},{ 151,1920},{182,1920},{0,1920}};unsigned int uWork;main(){unsigned int uWork1;int j,nCount,nCount1,nScanCode;nCount=nCount1=0;REGISTERCLKMD=0;CTRGR=0;CTRGR=0x80;CTRGR=8;CTRLR=0; // 关闭东西方向的交通灯CTRLR=0x40; // 关闭南北方向的交通灯uWork1=CTRCLKEY; // 清除键盘缓冲区for ( j=0;j<nMusicNumber;j++ )music[j][0]*=8;SPSA0=1; // set McBSP0's SPCR2uWork1=SPSD0;uWork1&=0xfffe; // set XRST=0SPSD0=uWork1;SPSA0=0x0e; // set McBSP0's PCRuWork1=SPSD0;uWork1|=0x2020; // set XIOEN=1, Enable IO,DX for output SPSD0=uWork1;uWork1= PMST;PMST = uWork1&0xff;IMR = 0x8;TCR = 0x412;TIM = 0;PRD = music[nCount][0]; // 频率设置TCR = 0x422;IFR = 0x100;asm(" rsbx INTM");j=0;while ( j<1 ){nCount1=0;nScanCode=CTRKEY; // 读扫描码nScanCode&=0x0ff; // 低8位uWork1=CTRCLKEY; // 清除键盘缓冲区if ( nScanCode!=0 ){if ( nScanCode==SCANCODE_Enter ) break; }nCount1++;Delay(music[nCount][1]/3*12); // 音长nCount++;if ( nCount>=nMusicNumber ){nCount=0; j++;}if ( music[nCount][0]==0 )TCR=0x412; // 静音else{PRD = music[nCount][0]; // 切换音符TCR = 0x422;}}}void Delay(unsigned int nDelay){int i,j,k=0;for ( i=0;i<nDelay;i++ )for ( j=0;j<64;j++ )k++;}void interrupt time(void){SPSA0=1; // set McBSP0's SPCR2uWork=SPSD0;uWork&=0xfffe; // set XRST=0SPSD0=uWork;SPSA0=0x0e; // set McBSP0's PCRuWork=SPSD0;uWork|=0x2000; // set XIOEN=1, Enable IO,DX for outputuWork^=0x20; // DX=^DXSPSD0=uWork;}五.结束语根据MMC/SD卡的SPI协议,采用单片机实现与MMC/SD卡的接口,解决了嵌入式系统大容量数据存储问题,利用上位机可以方便的读取写入数据。