📄 spi.asm
字号:
.copy "240xA.h"
.copy "240xAvector.h"
.def _c_int0
.text
_c_int0:
LDP #0H
SETC INTM ;禁止中断
LDP #00E0H
SPLK #006FH,WDCR ;禁止看门狗
SPLK #0084H,SCSR1 ;使能ADC模块和EVA时钟
LAR AR0,#00C7H ;重复200次
LAR AR1,#0800H ;从通道5采集的200个值存放在以0800H开始的200
;个数据单元中
LAR AR2,#08C8H ;从通道2采集的200个值存放在以08CAH开始的200
;个数据单元中
LAR AR3,#0990H ;从通道3采集的200个值存放在以0990H开始的200
;个数据单元中
LAR AR4,#0A58H ;从通道1采集的200个值存放在以0A58H开始的200
;个数据单元中
LAR AR5,#0B20H ;从通道3采集的200个值存放在以0B20H开始的200
;个数据单元中
LAR AR6,#0BE8H ;从通道4采集的200个值存放在以0BE8H开始的200
;个数据单元中
LAR AR7,#0CB0H ;从通道6采集的200个值存放在以0CB0H开始的200
;个数据单元中
LDP #00E1H
SPLK #4000H,ADCCTRL1 ;复位ADC单元
NOP
SPLK #0010H,ADCCTRL1 ;设置工作于级联和启动停止模式
SPLK #2H,MAXCONV ;第一次转换通道数为3个
SPLK #1325H,CHSELSEQ1 ;转换通道5,2,3,1
SPLK #0643H,CHSELSEQ2 ;转换通道为3,4,6
SPLK #4000H,ADCCTRL2 ;复位排序器,使其指向CONV00
SPLK #0500H,ADCCTRL2 ;允许SEQ1被EVA的触发源启动
LDP #00E8H
SPLK #0480H,GPTCONA ;允许T1下溢和T2周期触发AD转换
SPLK #1000H,T1CON ;禁止T1
SPLK #1080H,T2CON ;禁止T2
SPLK #0000H,T1CNT ;设置T1的计数初值
SPLK #0000H,T2CNT ;设置T2的计数初值
SPLK #03E8H,T1PR ;设置T1的周期值
SPLK #07D0H,T2PR ;设置T2的周期值
SPLK #1040H,T1CON ;启动T1和T2,实现同步
LDP #0H
SPLK #0FFFFH,IFR ;清中断标志
SPLK #0001H,IMR ;允许INT1中断
CLRC INTM ;开CPU中断
TEST: NOP
B TEST
GISR1: LDP #00E1H
LACL MAXCONV ;根据MAXCONV判断是否后半部分
XOR #0003H
BCND TWO,EQ
ONE: SPLK #0003H,MAXCONV ;前半部分完成后的操作
LACL RESULT5 ;读取转换结果并存入相应区域
MAR *,AR1
SACL *+
LACL RESULT2
MAR *,AR2
SACL *+
LACL RESULT3
MAR *,AR3
SACL *+
B GISR1_RET
TWO:
SPLK #0002H,MAXCONV ;后半部分完成后的操作
LACL ADCCTRL2 ;对排序器进行复位
OR #4000H
SACL ADCCTRL2 ;读取转换结果并存入相应区域
LACL RESULT1
MAR *,AR4
SACL *+
LACL RESULT3
MAR *,AR5
SACL *+
LACL RESULT4
MAR *,AR6
SACL *+
LACL RESULT6
MAR *,AR7
SACL *+
MAR *,AR0 ;判断是否已完成200次
BANZ GISR1_RET
B OKRET
GISR1_RET:LDP #00E1H ;清中断标志
LACL ADCCTRL2
OR #0200H
SACL ADCCTRL2
LDP #0H
SPLK #0FFFFH,IFR
CLRC INTM ;开中断
OKRET: RET
GISR2: RET
GISR3: RET
GISR4: RET
GISR5: RET
GISR6: RET
PHANTOM: RET
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -