📄 fir_f.asm
字号:
************************************************************
****标题
.title "FIR汇编代码"
************************************************************
.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指针赋值
HN .float -0.0024,-0.0036,-0.0052,-0.0046,0.0027
.float 0.0204,0.0497,0.0867,0.1239,0.1515
.float 0.1617,0.1515,0.1239,0.0867,0.0497
.float 0.0204,0.0027,-0.0046,-0.0052,-0.0036
.float -0.0024
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 0002448H
AIC2 .word 0000001H
AIC3 .word 0001E3EH
AIC4 .word 0000067H
IOSTRD .word 0000F8H
STR0D .word 0F10F8H
STR1D .word 0F10F8H
MASK .word 00FFFCH
INTA .word 88000000H
AD_HN .word HN
AD_SIG .word SIG
AD_STK .word STACK ;AD_STK保存STACK起始地址
.bss ADDATA,1
.bss STACK,100 ;堆栈空间
SIG .usect "sigspc",50 ;原信号空间
***************************************************
****程序段
.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
LDI @AD_SIG,AR7
LDF 0,R0
LDI 20,RC ;信号源空间初始化清零
RPTS
STF R0,*AR7++
LDI @AD_HN,AR1
LDI @AD_SIG,AR2
LDI 21,BK
FIR CALL WAIT_RECEIVE
LDI @ADDATA,R0
AND @MASK,R0
LSH 16,R0
ASH -18,R0 ;符号位扩展
FLOAT R0,R1 ;输入信号数据变为浮点数
LDI @AD_SIG,AR7
ADDI 20,AR7 ;AR7指向最后一个数据的地址
LDI 19,RC
RPTB LP1
LDF *-AR7,R0
LP1 STF R0,*AR7--
STF R1,*AR7 ;新数据存入
LDF 0.0,R0
LDF 0.0,R2
LDI @AD_HN,AR1
LDI 20,RC
RPTS
MPYF3 *AR1++,*AR7++,R0
||ADDF3 R0,R2,R2
ADDF3 R0,R2,R2
FIX R2,R3
ASH 18,R3
ASH -16,R3
B FIR
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 R3,*+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 + -