📄 g723main.asm
字号:
.title "g723.asm"
.include "g723_global.asm"
;McBsp0 内存映射寄存器
SPSA0 .set 038h ;定义子地址寄存器映射位置
SPSD0 .set 039h ;定义子块数据寄存器映射位置
DRR10 .set 021h ;接收数据寄存器1映射位置
DRR20 .set 020h ;接收数据寄存器2映射位置
DXR10 .set 023h ;发送数据寄存器1映射地址
DXR20 .set 022h ;发送数据寄存器2映射地址
;McBsp Subaddressed Registers
SPCR1 .set 00h ;定义SPCR10的映射子地址
SPCR2 .set 01h ;定义SPCR20的映射子地址
RCR1 .set 02h ;接收控制寄存器1映射子地址
RCR2 .set 03h ;接收控制寄存器2映射子地址
XCR1 .set 04h ;发送控制寄存器1映射子地址
XCR2 .set 05h ;发送控制寄存器2映射子地址
SRGR1 .set 06h ;采样率发生器寄存器1映射子地址
SRGR2 .set 07h ;采样率发生器寄存器2映射子地址
MCR1 .set 08h ;多通道控制寄存器1映射子地址
MCR2 .set 09h ;多通道控制寄存器2映射子地址
RCERA .set 0ah ;接收通道控制寄存器1映射子地址
RCERB .set 0bh ;接收通道控制寄存器2映射子地址
XCERA .set 0ch ;发送通道使能寄存器A映射子地址
XCERB .set 0dh ;发送通道使能寄存器B映射子地址
PCR .set 0eh ;引脚控制寄存器映射子地址
SPSA .set SPSA0 ;由于同步缓冲口采用子地址寻址方式
SPSD .set SPSD0
RDRR .set DRR10
RDXR .set DXR10
;以下程序是写数据的子程序也就是宏
WR_SUB_REG .macro val,addr ;写McBsp控制寄存器
stm addr,SPSA ;将ADDR的地址写入SPSA
nop ;空操作
stm val,SPSD ;将配置值写入SPSD
nop ;空操作
.endm
;以下程序是读数据的子程序也就是宏
RD_SUB_REG .macro addr,acc ;读McBsp控制寄存器
stm addr,SPSA ;将ADDR的地址写入SPSA
nop ;空操作
ldm SPSD,acc ;送入累加器保存
nop ;空操作
nop
nop
.endm
WAITTRX .macro ;等待串口中断宏
WAITR?
RD_SUB_REG SPCR1,A
and #1<<1, A
bc WAITR?, AEQ
.endm
PROGREG .macro progword ;DSP与AD50的二次通讯(将其最后一位置为1便可)
stm #01h,RDXR
WAITTRX
stm progword,RDXR
WAITTRX
.endm
;以下程序是等待延时子程序
wait .macro
STM #0400h, AR0
RPT *AR0
NOP
.endm
.mmregs
.global _c_int00
.global g723codec
.global DataAddr
.global retaddr
.bss flag,1
DataAddr .usect "speech",0x0a000
.sect ".vectors"
;以下是中断向量表
RESET b _c_int00
nop
nop
.space 19*4*16
BRINT0 b recv
nop
nop
BXINT0 b trans
nop
nop
.space 9*4*16
rete
rete
rete
rete
;以下是主程序
.text
_c_int00
ld #0h,DP ;设置数据页指针为第0页
stm #0x900,SP ;设置堆栈指针地址为2000H
ssbx INTM ;关闭所有中断
st #7FFFh,SWWSR ;设置等待寄存器全都设置为7等待
st #0e8h,PMST ;设置处理器工作方式状态寄存器
st #4007h,CLKMD ;设置时钟方式寄存器,工作频率为20M(工作频率取决于(高四位+1*10M
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -