⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yinpincj.txt

📁 个人制作的音频信号采集的DSP汇编程 序个人制作的音频信号采集的DSP汇编程
💻 TXT
字号:
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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -