📄 spi.asm
字号:
;用户寄存器定义
SPI_DATA .usect ".data0",1 ;临时数据寄存器
SPI_FLAG .usect ".data0",1 ;SPI 标志位
SPI_CON .usect ".data0",1 ;MAX5741的控制字
DP_USER .set 5 ;用户寄存器存放页指针
;MAX5121 的控制字宏定义
DACOUT .set 0000H ;0
UPINREG .set 07FEH ;
UPDACREG .set 0FFCH ;1
;(1) 主程序
.include "F2407REGS.H"
.def _c_int0
.text
_c_int0
CALL SYSINIT ;调系统初始化程序
CALL SPI_INIT ;调SPI初始化程序
LOOP: CALL SPI_SEND ;调输出三角波程序
NOP
WAIT: LDP #DP_USER
SPLK #00H, SPI_FLAG ;清标志
SPLK #00H, SPI_DATA ;重置初值
B LOOP
;(2) 系统初始化程序
SYSINIT:
SETC INTM
CLRC SXM
CLRC OVM
CLRC CNF
LDP #0E0H
SPLK #81FEH,SCSR1 ;四倍频CLKIN=6M,CLKOUT=24M
SPLK #0E8h,WDCR ;关看门狗
LDP #0
SPLK #0001h,IMR ;使能中断1
SPLK #0FFFFh,IFR ;清中断标志
RET
;(3) SPI初始化程序
SPI_INIT:
LDP #DP_PF2
LACL MCRB
OR #00014H ;配置SPISIMO和SPICLK引脚为特殊功能方式
SACL MCRB
LACL MCRB
AND #0FFF7H ;配置IOPC3为一般的I/O口功能
SACL MCRC ;CS=IOPC3
LDP #DP_PF1
SPLK #004FH,SPICCR ;配置SPI寄存器允许初始化,16位数据输出
SPLK #0006H,SPICTL ;主机方式,时钟方式为无延时的下降沿
SPLK #0002H,SPIBRR ;SPI波特率为6MHZ
SPLK #00CFh,SPICCR ;初始化结束,并关闭初始化使能位
LDP #DP_USER
SPLK #00H,SPI_DATA ;置发送数据初值
SPLK #00H,SPI_FLAG ;SPI_FLAG=00H,执行三角波上升
;SPI_FLAG=01H,执行三角波下降
SPLK #DACOUT,SPI_CON ;送MAX5741的控制字
RET
;(4) 输出三角波程序
SPI_SEND:
SPI_TX: LDP #DP_PF2
LACL PCDATDIR
OR #0800H ;IOPC3 脚为输出方式
AND #0FFF7H ;CS= IOPC3=0
SACL PCDATDIR
NOP
NOP
LDP #DP_USER
LACC SPI_DATA
AND #01FFEH ;S0=0
OR SPI_CON
SACL SPI_DATA ;规格化发送的数据
LDP #DP_PF1
SACL SPITXBUF ;数据写入到SPI发送缓冲区
XMIT_RDY:BIT SPISTS,BIT6 ;等待数据
BCND XMIT_RDY,NTC ;发送完
NOP
NOP
NOP
LDP #DP_PF2
LACL PCDATDIR
OR #0808H ;CS=IOPC3=1
SACL PCDATDIR ;锁存数据
LDP #DP_USER
BIT SPI_FLAG,BIT0
BCND SPI_FALL,TC
LDP #DP_USER ;三角波上升段程序
LACC SPI_DATA
AND #01FFEH
ADD #04H ;递增
SACL SPI_DATA
SUB #01FFEH
BCND SPI_FALL,EQ
B SPI_TX
SPI_FALL:LDP #DP_USER ;三角波下降段程序
SPLK #01, SPI_FLAG
LACC SPI_DATA
AND #01FFEH
SUB #04H ;递减
SACL SPI_DATA
BCND SPI_RET,EQ
B SPI_TX
SPI_RET:RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -