📄 c54_init.asm
字号:
.copy 5410.mmreg
.def _c54_init,_intdelay,_leddelay,_hpidsp_host,_clearint0
.global _ad0fr,_ad1fr,_leddelaytime,_intdelaytime
.global _imrvar,_clkmdvar,_prdvar,_tcrvar
.bss _ad0fr,1
.bss _ad1fr,1
.bss _leddelaytime,1
.bss _intdelaytime,1
.bss _imrvar,1
.bss _clkmdvar,1
.bss _prdvar,1
.bss _tcrvar,1
.bss IO_Outdata,1
.text
_c54_init:
SSBX INTM
RSBX XF ;RESET ADC
portr 0400h,IO_Outdata
;CPU
STM 0,ST0 ;ARP=0、DP=0
STM 0100001101011111B,ST1 ;CPL=0 DP直接寻址、中断屏蔽、溢出保护、
;符号扩展、FRCT有效、ARP无效、ASM=-1
STM 0010000000100100B,PMST ;中断定位2000H、程序/数据空间有效,DROM=1 SARAM2有效
STM 0x7FFF,SWWSR ;0 WS for memory, 2 WS for I/O */
STM 0x3,@0x2B
;
;CLK
STM 0,BSCR ;CLKOUT = CPU CLOCK
NOP
NOP
;STM 0,CLKMD ;Reset to DIV Mod
;NOP
;NOP
;ld *(_clkmdvar),A
;STLM A,CLKMD
STM 0,CLKMD ;Reset to DIV Mod
NOP
NOP
STM 1001011111111111B,CLKMD
NOP
NOP
NOP
NOP
;TOUT = 100M/16
STM 0000010000010001B,TCR ;TDDR=3
NOP
NOP
LD *(_prdvar),A
STLM A,PRD ;PRD=3
NOP
NOP
LD *(_tcrvar),A
STLM A,TCR ;TDDR=3
NOP
NOP
;
SSBX XF ;ENABLE ADC
portw IO_Outdata,0400h
CALL WAIT
;McBSP0
STM 0,SPSA0
STM 0X40A0,SPCR0 ;SPCR10 ;reset
STM 1,SPSA0
STM 0X0220,SPCR0 ;SPCR20
STM 2,SPSA0
STM 0X0040,SPCR0 ;RCR10 ;receive frame and word length
STM 3,SPSA0
STM 0X0040,SPCR0 ;RCR20 ;receive frame and word length
STM 4,SPSA0
STM 0X0040,SPCR0 ;xCR10 ;transmit frame and word length
STM 5,SPSA0
STM 0X0040,SPCR0 ;xCR20 ;transmit frame and word length
STM 0x000e,SPSA0
STM 0CH,SPCR0 ;PCR0 ;Polarity
STM 0,DXR10 ;发送清空
STM 0,23H
NOP
NOP
STM 1,SPSA0
STM 0X0221,SPCR0 ;SPCR20
STM 0,SPSA0
STM 0X40A1,SPCR0 ;SPCR10 ;run
NOP
NOP
;
;McBSP1
STM 0,SPSA1
STM 0X40A0,SPCR1 ;SPCR11 ;reset
STM 1,SPSA1
STM 0X0220,SPCR1 ;SPCR21
STM 2,SPSA1
STM 0X0040,SPCR1 ;RCR11 ;receive frame and word length
STM 3,SPSA1
STM 0X0040,SPCR1 ;RCR21 ;receive frame and word length
STM 4,SPSA1
STM 0X0040,SPCR1 ;xCR11 ;transmit frame and word length
STM 5,SPSA1
STM 0X0040,SPCR1 ;xCR21 ;transmit frame and word length
STM 0x000e,SPSA1
STM 0CH,SPCR1 ;PCR1 ;Polarity
STM 0,DXR11 ;发送清空
STM 0,43H
NOP
NOP
STM 1,SPSA1
STM 0X0221,SPCR1 ;SPCR20
STM 0,SPSA1
STM 0X40A1,SPCR1 ;SPCR10 ;run
NOP
NOP
;
;AD变换器0
CALL WAIT
CALL WAIT
CALL WAIT
CALL WAIT
;reg 2 AD分频器
CALL DX0EMPT
STM 0,DXR10 ;发送清空
CALL DX0EMPT
STM 1,DXR10 ;第二串口通信请求
CALL DX0EMPT
ld *(_ad0fr),A
stlm A,DXR10
CALL DX0EMPT
STM 0,DXR10
;reg 4 输入放大
CALL DX0EMPT
STM 0,DXR10 ;发送清空
CALL DX0EMPT
STM 1,DXR10 ;第二串口通信请求
CALL DX0EMPT
STM 0000100000001100B,DXR10
CALL DX0EMPT
STM 0,DXR10
;AD变换器1缺省值
CALL WAIT
;reg2 AD分频器
CALL DX1EMPT
STM 0,DXR11 ;发送清空
CALL DX1EMPT
STM 1,DXR11 ;第二串口通信请求
CALL DX1EMPT
ld *(_ad1fr),A
stlm A,DXR11
CALL DX1EMPT
STM 0,DXR11
;reg4 输入放大
CALL DX1EMPT
STM 0,DXR11 ;发送清空
CALL DX1EMPT
STM 1,DXR11 ;第二串口通信请求
CALL DX1EMPT
STM 0000100000001100B,DXR11 ;
CALL DX1EMPT
STM 0,DXR11
;interupt enable
CALL WAIT
CALL WAIT
;LD *(_imrvar),A
;STLM A,IMR
STM 0X630,IMR
NOP
RSBX INTM
RET
WAIT: STM #0X0FFF,AR0
WAIT0: STM #0X00FF,AR1
WAIT1: BANZ WAIT1,*AR1-
BANZ WAIT0,*AR0-
RET
WAITT: STM #0X00FF,AR0
WAITT0: STM #0X00F,AR1
WAITT1: BANZ WAITT1,*AR1-
BANZ WAITT0,*AR0-
RET
_leddelay: ld *(_leddelaytime),A
stlm A,AR0
leddelay0: STM #0XFFFF,AR1
leddelay1: BANZ leddelay1,*AR1-
rpt #1000
nop
BANZ leddelay0,*AR0-
RET
_intdelay: ld *(_intdelaytime),A
stlm A,AR0
intdelay0: STM #0XF,AR1
intdelay1: BANZ intdelay1,*AR1-
BANZ intdelay0,*AR0-
RET
;MCBSP0 发送空检测
DX0EMPT: STM 1,SPSA0
LDM SPCR0,A ;SPCR20
NOP
NOP
AND #0004h,A
NOP
NOP
BC DX0EMPT,ANEQ
NOP
NOP
CALL WAITT
NOP
RET
;MCBSP1 发送空检测
DX1EMPT: STM 1,SPSA1
LDM SPCR1,A ;SPCR21
NOP
NOP
AND #0004h,A
NOP
NOP
BC DX1EMPT,ANEQ
NOP
CALL WAITT
NOP
NOP
RET
;----------------------------------------
_clearint0
ld IFR,A
AND #0xfffe,A
STLM A,IFR
ret
_hpidsp_host
STM 0x0a,HPIC ;to init a hpi to host int!
ret
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -