📄 adc.asm
字号:
;A/D转换程序
STACK .usect "STACK",100h
AK_RCR11 .set 0000000001000000b ; 每帧一个字,字长为16 bit
AK_RCR21 .set 0000000001000000b ; 单相帧
AK_XCR11 .set 0000000001000000b
AK_XCR21 .set 0000000001000000b
AK_SRGR11 .set 0000000000010011b ;帧的宽度=CLKG,
;CLKG=CPU CLK/(1+CLKGDV)=CPU CLK/20
AK_SRGR21 .set 0011000000111111b
;GLKSM=1,采样率发生器时钟来源于CPU时钟。
;FSGM=1,发送帧同步信号FSX由采样率发生器FSG驱动。
;帧周期=(FPER+1)×CLKG=64 CLKG。
AK_PCR1 .set 0000101000000000b
;FSXM=1,FSRM=0,FSR引脚为输入,由FSX引脚提供输入。
;CLKRP=0,在CLKR的下降沿采样接收数据。
SPSA1 .set 48h ;串口1子地址寄存器
McBSP1 .set 49h ;串口1子数据寄存器
DRR11 .set 41h ;数据接收寄存器1
DRR21 .set 40h ;数据接收寄存器2
.mmregs
.def _c_int00
.text
_c_int00
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 rsbx intm
rete
nop
nop
INT1 rsbx intm
rete
nop
nop
INT2 rsbx intm
rete
nop
nop
TINT: rete
nop
nop
nop
RINT0: rete
nop
nop
nop
XINT0: rete
nop
nop
nop
SINT6 .space 4*16
SINT7 .space 4*16
INT3: rete
nop
nop
nop
HPINT: rete
nop
nop
nop
RINT1: BD RECIV
nop
nop
nop
XINT1: rete
nop
nop
nop
;*************************
start: LD #0,DP
STM #STACK+100h,SP
STM #7FFFh,SWWSR
STM #1020h,PMST
SSBX INTM
SSBX CMPT ;CMPT=1,ARP可以改变
CALL ADCBSP
STM #0400H,IMR ;使能串口1接收中断
RSBX INTM
STM #3000H,AR0 ;起始地址
STM #256,AR1 ;数据存储器单元个数
WAIT: B WAIT
;以下为串口1的初始化程序
ADCBSP: STM #00h,SPSA1 ; 00h串口控制寄存器1子地址
STM #0000h,McBSP1 ; RRST=0
STM #01h,SPSA1 ; 01h串口控制寄存器2子地址
STM #0000h,McBSP1 ; XRST=GRST=0,将整个串口复位
STM #06h,SPSA1 ; 06h采样率发生器寄存器1子地址
STM #AK_SRGR11,McBSP1
STM #07h ,SPSA1 ; 07h采样率发生器寄存器2子地址
STM #AK_SRGR21,McBSP1
STM #02h ,SPSA1 ; 02h接收控制寄存器1子地址
STM #AK_RCR11,McBSP1
STM #03h ,SPSA1 ; 03h接收控制寄存器2子地址
STM #AK_RCR21,McBSP1
STM #04h ,SPSA1 ; 04h发送控制寄存器1子地址
STM #AK_XCR11,McBSP1
STM #05h ,SPSA1 ; 05h发送控制寄存器2子地址
STM #AK_XCR21,McBSP1
STM #0Eh ,SPSA1 ; 0Eh引脚控制寄存器子地址
STM #AK_PCR1,McBSP1
NOP ; 等待两个CPU时钟
NOP
STM #01h ,SPSA1 ; 01h串口控制寄存器2子地址
STM #0000001001000000b,McBSP1 ; GRST=1,使采样率发生器工作
RPT #20
NOP
RSBX XF ; 选通ADC
STM #01h ,SPSA1 ; 01h串口控制寄存器2子地址
STM #0000001001000001b,McBSP1; XRST=1,发送部分退出复位状态
STM #00h ,SPSA1 ; 00h串口控制寄存器1子地址
STM #0000000000000001b,McBSP1 ; RRST=1,接收部分退出复位状态
STM #01h ,SPSA1 ; 01h串口控制寄存器2子地址
STM #0000001011000001b,McBSP1 ; FRST=1,产生帧同步脉冲信号
NOP
NOP
RET
RECIV: STM #3FFFH,IFR ; 串口1的接收中断服务程序
LDM DRR11,A
LD #0,ARP
STL A,*AR0+
LD #1,ARP
BANZ LOOP1,*AR1-
STM #3000H,AR0 ; 重复采样,设初值
STM #256,AR1
LOOP1: RETE
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -