|
1. 头文件 *===================================================================== * FILENAME: Regs.h *===================================================================== .mmregs *--------------------- McBSP0 Registers -------------------------
DRR20 .set 0020h ; McBSP0 Data Rx Reg2 DRR10 .set 0021h ; McBSP0 Data Rx Reg1 DXR20 .set 0022h ; McBSP0 Data Tx Reg2 DXR10 .set 0023h ; McBSP0 Data Tx Reg1 SPSA0 .set 0038h ; McBSP0 Sub Bank Addr Reg SPSD0 .set 0039h ; McBSP0 Sub Bank Data Reg
*--------------------- McBSP1 Registers --------------------------
DRR21 .set 0040h ; McBSP1 Data Rx Reg2 DRR11 .set 0041h ; McBSP1 Data Rx Reg1 DXR21 .set 0042h ; McBSP1 Data Tx Reg2 DXR11 .set 0043h ; McBSP1 Data Tx Reg1 SPSA1 .set 0048h ; McBSP1 Sub Bank Addr Reg SPSD1 .set 0049h ; McBSP1 Sub Bank Data Reg
*------- McBSP0 & McBSP1 Sub-Bank Addressed Registers ------------- SPCR1 .set 0000h ; McBSP Ser Port Ctrl Reg1 SPCR2 .set 0001h ; McBSP Ser Port Ctrl Reg2 RCR1 .set 0002h ; McBSP Rx Ctrl Reg1 RCR2 .set 0003h ; McBSP Rx Ctrl Reg2 XCR1 .set 0004h ; McBSP Tx Ctrl Reg1 XCR2 .set 0005h ; McBSP Tx Ctrl Reg2 SRGR1 .set 0006h ; McBSP Sample Rate Gen Reg1 SRGR2 .set 0007h ; McBSP Sample Rate Gen Reg2 MCR1 .set 0008h ; McBSP Multichan Reg1 MCR2 .set 0009h ; McBSP Multichan Reg2 RCERA .set 000Ah ; McBSP Rx Chan Enable Reg Partition A RCERB .set 000Bh ; McBSP Rx Chan Enable Reg Partition B XCERA .set 000Ch ; McBSP Tx Chan Enable Reg Partition A XCERB .set 000Dh ; McBSP Tx Chan Enable Reg Partition B PCR .set 000Eh ; McBSP Pin Ctrl Reg 2. 中断向量表 .title "vectors.asm" .ref start .ref receive_int .sect ".vectors" RESET: B start ;复位矢量 NOP NOP NMI: RETE ;非屏蔽中断 NOP NOP NOP SINT17 .space 4*16 ;软件中断 SINT18 .space 4*16 SINT19 .space 4*16 SINT20 .space 4*16 SINT21 .space 4*16 SINT22 .space 4*16 SINT23 .space 4*16 SINT24 .space 4*16 SINT25 .space 4*16 SINT26 .space 4*16 SINT27 .space 4*16 SINT28 .space 4*16 SINT29 .space 4*16 SINT30 .space 4*16
INT0: RETE ;外部用户中断0 NOP NOP NOP INT1: RETE ;外部用户中断1 NOP NOP NOP INT2: RETE ;外部用户中断2 NOP NOP NOP TINT0: RETE ;定时器0中断 NOP NOP NOP BRINT0: B receive_int ;McBSP0接收中断 NOP NOP NOP BXINT0: RETE ;McBSP0发送中断 NOP NOP NOP DMAC0: RETE ;DMA通道0中断 NOP NOP NOP TINT1: RETE ;定时器1中断 NOP NOP NOP INT3: RETE ;外部用户中断3 NOP NOP NOP HPINT: RETE ;主机接口(HPI)中断 NOP NOP NOP BRINT1: RETE ;McBSP1接收中断 NOP NOP NOP BXINT1: RETE ;McBSP1发送中断 NOP NOP NOP DMAC4: RETE ;DMA通道4中断 NOP NOP NOP DMAC5: RETE ;DMA通道5中断 NOP NOP NOP .end 3. CMD文件 vectors.obj audio.obj -o audio.out -m audio.out -e start
MEMORY { PAGE 0: PFLASH: org=10000h,len=0C000h VECS: org=0FF80h,len=0080h PAGE 1: DARAM: org=20000h,len=20000h DFLASH: org=00000h,len=4000h } SECTIONS { .text :>PFLASH PAGE 0 .data :>PFLASH PAGE 0 .bss :>DARAM PAGE 1 STACK :>DFLASH PAGE 1 .vectors :>VECS PAGE 0 } 4. 主程序 .title "audio.asm" .mmregs .include "regs.h" .def start .def init_5402 .def init_mcbsp .def init_codec .def receive_int STACK .usect "STACK",200h .text start: STM #STACK+200h,SP ;设置堆栈指针 B init_5402 ;TMS320VC5402初始化(STO,ST1,PMST,SWWSR,BSCR) B init_mcbsp ;McBSP模块初始化 B init_codec ;TLV320AIC15初始化 STM #0 ,IMR ;中断屏蔽寄存器清0 ORM #0010h ,IMR ;使能BRINT0,BXINT0中断 STM #0FFFFh ,IFR ;中断标志寄存器清0 RSBX INTM ;中断使能 end: NOP NOP B end ;-------------------------------------------------------------------------------------- init_5402: STM #2492h ,SWWSR ;插入2个等待状态 STM #0002h ,BSCR ;块切换时插入0个等待状态 STM #1800h ,ST0 ;DP指针清0 STM #2940h ,ST1 ;相对寻址使用DP指针,中断禁止 STM #0FF88h ,PMST ;MP/MC=0,OVLY=0,DROM=1,CLKOUT输出使能 RET ;--------------------------------------------------------------------------------------- W_McBSP_REG .macro addr ,val ;定义一个宏,写McBSP寄存器 STM addr ,SPSA0 ;设置子地址寄存器的值 NOP STM val ,SPSD0 ;设置子数据寄存器的值 NOP NOP .endm R_McBSP_REG .macro addr ,acc ;定义一个宏,读McBSP寄存器 STM addr ,SPSA0 ;设置子地址寄存器的值 NOP LDM SPSD0 ,acc ;将子数据寄存器的值传给累加器 NOP .endm WAIT_W .macro ;定义一个宏,等待 WAIT?: R_McBSP_REG SPCR2 ,A AND #10 ,A ;发送RDY信号与A向与 BC WAIT? ,AEQ ;发送没准备好就继续等待 .endm PROGREG .macro progword ;定义一个宏,向Codec写控制命令 STM #01h ,DXR10 ;通过向数据最低位写1,使Codec由连续数据模式 ;转换为编程模式 WAIT_W STM progword,DXR10 ;向数据发送寄存器写控制字 WAIT_W .endm ;--------------------------------------------------------------------------------------- init_mcbsp: W_McBSP_REG SPCR1 ,#0000h ;数据右对齐,接收器复位 W_McBSP_REG SPCR2 ,#0000h ;帧同步发生器,采样率发生器,发送器复位 W_McBSP_REG PCR ,#000Ch ;DX,FSX,CLKX,DR,FSR,CLKR配置为串口, ;帧同步信号,发送时钟,接收时钟由外部器 ;件驱动,发送,接收帧同步脉冲高电平有效, ;在CLKX的上升沿采样发送数据,CLKR的 ;下降沿采样接收数据 W_McBSP_REG RCR1 ,#0040h ;接收数据每帧长度为1个字,字长为16位 W_McBSP_REG RCR2 ,#0004h ;接收数据为单相帧,无扩展,无延迟,第一 ;个后的接收帧同步脉冲被忽略 W_McBSP_REG XCR1 ,#0040h ;发送数据每帧长度为1个字,字长为16位 W_McBSP_REG XCR2 ,#0004h ;发送数据为单相帧,无扩展,无延迟,第一 ;个后的发送帧同步脉冲被忽略 NOP NOP STM #0 ,DRR10 ;数据接收寄存器清0 STM #0 ,DXR10 ;数据发送寄存器清0 W_McBSP_REG SPCR1 ,#0001h ;使能接收器 W_McBSP_REG SPCR2 ,#0001h ;使能发送器 RET ;---------------------------------------------------------------------------------------- init_codec: PROGREG #2740h ;设置控制寄存器1,选择连续数据模式,DAC ;输入数据长度为15bit PROGREG #4720h ;设置控制寄存器2, ;SCLK=16*FS*#Device*mode PROGREG #6701h ;设置控制寄存器3,FS/fs=1 PROGREG #8700h ;设置控制寄存器4,N=16,P=8 PROGREG #8719h ;设置控制寄存器4,M=9 PROGREG #0C704h ;设置控制寄存器6,模拟输入为MICIN的公 ;共外部模式 ;---------------------------------------------------------------------------------------- receive_int: LDM DRR10 ,A ;将串口数据接收寄存器的值传给累加器A STL A ,DXR10 ;将累加器A的值传给串口数据发送寄存器 RETE .end
|