📄 testad.asm
字号:
********高速数字信号处理实验-TESTAD TMS320C32汇编代码*******
************************************************************
****标题
.title "AD汇编代码"
************************************************************
.global init
****中断表
.sect "vectors" ;C32中断跳转表
BR INIT
BR ISR0 ;INT0- 中断0地址给PC
BR ISR1 ;INT1- 中断1地址给PC
BR ISR2 ;INT2- 中断2地址给PC
BR ISR3 ;INT3- 中断3地址给PC
BR XISR0 ;XINT0- 串口0发送中断地址给PC
BR RISR0 ;RINT0- 串口0接收中断地址给PC
.space 2 ;保留两个地址
BR TISR0 ;TINT0- 定时器0中断地址给PC
BR TISR1 ;TINT1- 定时器1中断地址给PC
BR DISR0 ;DINT0- DMA0中断地址给PC
.space 52 ;保留52个地址空间
***************************************************
****数据段
.data
DATP ;用于DP指针赋值
D0A .word 0808000H ;DMA0控制寄存器地址
D1A .word 0808010H ;DMA1控制寄存器地址
T0A .word 0808020H ;TIMER0控制寄存器地址
T1A .word 0808030H ;TIMER1控制寄存器地址
SPA .word 0808040H ;串口控制寄存器地址
IOSTRA .word 0808060H ;IOSTRB控制寄存器地址
STR0A .word 0808064H ;STRB0总线控制寄存器地址
STR1A .word 0808068H ;STRB1总线控制寄存器地址
T0CLT .word 00002C1H ;TIMER1控制寄存器初始化值
SCLTA .word 02170300H ;串口控制寄存器初始化值
SCLTB .word 0E970300H ;串口控制寄存器初始化值
SXCLT .word 0000111H ;串口发送控制寄存器初始化值
SRCLT .word 0000111H ;串口接收控制寄存器初始化值
STCLT .word 0000000H ;串口定时控制寄存器初始化值
STDA .word 0001800H ;状态寄存器初始化值
IEDA .word 0000020H ;中断允许寄存器初始化值
AIC1 .word 0000A28H
AIC2 .word 0000001H
AIC3 .word 0003E7EH
AIC4 .word 0000067H
IOSTRD .word 0000F8H
STR0D .word 0F10F8H
STR1D .word 0F10F8H
MASK .word 00FFFCH
INTA .word 88000000H
AD_SIG .word SIG
AD_STK .word STACK ;AD_STK保存STACK起始地址
.bss ADDATA,1
.bss RINT,1
.bss STACK,100 ;堆栈空间
SIG .usect "oldspc",1024 ;原信号空间
***************************************************
****程序段
.text
* 处理器初始化部分
INIT LDP DATP ;设置DP
LDI @STDA,ST ;设置ST寄存器
XOR IE,IE ;设置IE寄存器
XOR IF,IF ;初始化IF寄存器
LDI @AD_STK,SP ;设置堆栈指针
LDI 22H,IOF ;设置XF0\1为通用输入引脚
* 设置总线寄存器
LDI @IOSTRA,AR0
LDI @IOSTRD,R0
STI R0,*AR0
LDI @STR0A,AR0
LDI @STR0D,R0
STI R0,*AR0
LDI @STR1A,AR0
LDI @STR1D,R0
STI R0,*AR0
OR 2000H,ST
* 进行TLC32044与TMS320C32通信初始化
LDI @SPA,AR0 ;初始化串口0
LDI @SCLTA,R1
STI R1,*AR0
LDI @SXCLT,R1
STI R1,*+AR0(2)
STI R1,*+AR0(3)
LDI @SCLTB,R1
STI R1,*AR0
LDI 66H,IOF ;TLC32044复位结束
RPTS 99
NOP
* 发送初始化AIC序列
LDI 3,R1
STI R1,*+AR0(8)
CALL WAIT_TRANSMIT
LDI @AIC1,R1
STI R1,*+AR0(8)
LDI *+AR0(12),R0
CALL WAIT_TRANSMIT
LDI 3,R1
STI R1,*+AR0(8)
CALL WAIT_TRANSMIT
LDI @AIC2,R1
STI R1,*+AR0(8)
LDI *+AR0(12),R0
CALL WAIT_TRANSMIT
LDI 3,R1
STI R1,*+AR0(8)
CALL WAIT_TRANSMIT
LDI @AIC3,R1
STI R1,*+AR0(8)
LDI *+AR0(12),R0
CALL WAIT_TRANSMIT
LDI 3,R1
STI R1,*+AR0(8)
CALL WAIT_TRANSMIT
LDI @AIC4,R1
STI R1,*+AR0(8)
LDI *+AR0(12),R0
CALL WAIT_TRANSMIT
ADLOOP
LDI 0,R0
STI R0,@RINT
LDI @AD_SIG,AR7
LDI 1024,R7
WAIT
CALL WAIT_RECEIVE
LDI @ADDATA,R0
AND @MASK,R0
LSH 16,R0
ASH -18,R0
STI R0,*AR7++
SUBI 1,R7
CMPI 0,R7
BZ END
B WAIT
END
B ADLOOP
WAIT_TRANSMIT
LDI *AR0,R1
TSTB 2H,R1
BZ WAIT_TRANSMIT
RETS
WAIT_RECEIVE
LDI *AR0,R1
TSTB 1H,R1
BZ WAIT_RECEIVE
LDI *+AR0(12),R0
STI R0,@ADDATA
AND 0FFFCH,R0
STI R0,*+AR0(8)
RETS
******************************************************
* INT0服务子程序
ISR0
RETI
******************************************************
* INT1服务子程序
ISR1
RETI
******************************************************
* INT2服务子程序
ISR2
RETI
******************************************************
* INT3服务子程序
ISR3
RETI
******************************************************
* 串口0发送中断服务子程序
XISR0
RETI
******************************************************
* 串口0接收中断服务子程序
RISR0
RETI
******************************************************
* 定时器0中断服务子程序
TISR0
RETI
******************************************************
* 定时器1中断服务子程序
TISR1
RETI
******************************************************
* DMA0中断服务子程序
DISR0
RETI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -