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

📄 ʶ

📁 关于饮品采集的汇编函数
💻
字号:
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 + -