基于单片机的电子导游MP3设计
NAND FLASH存储器操作模块实现存储器的物理检查、存储器链表建立和映射、存储器读写访问等。
时钟系统初始化模块
MSP430单片机是多时钟芯片,在降低系统功耗的同时,为了充分发挥其性能,需要对系统时钟进行编程。
系统将XT2外接8MHz晶振,获得8MHz的主系统时钟MCLK。而子系统时钟SMCLK为DCO振荡器产生的频率为800KHz的信号。时钟调整程序为:
BIS.W #OSCOFF,SR ;关闭LFXT1振荡器
BIC.B #XT2OFF,BCSCTL1 ;启动XT2振荡器
SETUPOSC:
BIC.B #OFIFG,IFG1 ;清除振荡器失效中断
MOV.W #0FFh,R15
SetupOsc1:
DEC.W R15 ;计算等待时间至"0"
JNZ SetupOsc1 ;等待循环
BIT.B #OFIFG,IFG ;测试振荡器失效中断标志
JNZ SETUPOSC ;重复测试,直至标志始终复位
BIC.B #OFIFG,IFG1 ;清除振荡器失效中断
BIS.B #80H,BCSCTL2;选择SMCLK时钟源
模拟I2C总线模块
MSP430F133没提供I2C的硬件电路,因此需要用IO口线模拟。用于通过I2C来控制MAS3507D和DAC3550A。模拟I2C时序的程序包括启动模块、停止模块、发送一个字节模块、接收一个字节模块、主应答模块(MACK)、主非应答模块(MNACK)、从应答模块(CACK)等。
在程序设计中,充分利用了MSP430F133 I/O端口的特性,减少相关寄存器的操作次数,简化接口控制,缩小代码量。下列程序段是模拟I2C总线的启动功能。要求置时钟线为高,数据线为下降沿触发。
BIC.B #SCL+SDA,PORT_DIR
BIS.B #SDA,PORT_DIR ;SDA为输出
BIS.B #SCL,PORT_DIR ;SCL为输出
RET
位流传输模块
当解码芯片的请求信号有效时,单片机要从外挂的FLASH中读取存放的数据,发送给解码芯片。数据是按逐位传输的,先传输高位,后传输低位,在SIC时钟下降沿锁存位数据到解码芯片。
DATA_TO_MAS: BIT.B #REQ,P1DIR
JZ DATA_TO_MAS
;REQ为0表示MAS不需要数据
CALL #BYTE_READ
;从FLASH读一个字节到RAM
MOV.B #8,R4 ;用R4计数
TRANSFER: RLA.B READ_BYTE_A
JC BIT_1
BIT_0: BIC.B #SID,P5OUT
JMP LOCK_BIT
BIT_1: BIS.B #SID,P5OUT
LOCK_BIT: BIS.B #SIC,P5OUT
BIC.B #SIC,P5OUT
DEC.B R4
JNZ TRANSFER
结束语
本文设计的电子导游以TI公司的MSP430F133为主控制芯片,使用Micronas公司的解码芯片MAS3507D以及配套的D/A转换芯片。本系统不仅具备了MP3播放器的全部功能,而且可作为便携式存储器,用于存储文件、相片等。其特定的设计功能不仅可用于电子导游,还可用于公交报站、博物馆、展览馆、无人值守交通路口的语音提示等。
参考文献:
[1]. MSP430F133 datasheet http://www.dzsc.com/datasheet/MSP430F133_307447.html.
[2]. MSP430 datasheet http://www.dzsc.com/datasheet/MSP430_490166.html.
[3]. RISC datasheet http://www.dzsc.com/datasheet/RISC_1189725.html.
[4]. MAS3507D datasheet http://www.dzsc.com/datasheet/MAS3507D_470629.html.
[5]. DAC3550A datasheet http://www.dzsc.com/datasheet/DAC3550A_253258.html.
评论