串行外设接口应用举例

串行外设接口应用举例
串行外设接口应用举例

串行外设接口应用举例

;用户寄存器定义

SPI_DA TA .usect ".data0",1 ;临时数据寄存器

SPI_FLAG .usect ".data0",1 ;SPI 标志位

SPI_CON .usect ".data0",1 ;MAX5121的控制字DP_USER .set 5 ;用户寄存器存放页指针;MAX5121 的控制字宏定义

DACOUT .set 4000h ;C2C1C0=010 UPINREG .set 2000h ;C2C1C0=001 UPDACREG .set 6000h ;C2C1C0=011 SHUTDAC .set 0A00h ;C2C1C0=101

;(1)主程序

.include "F2407REGS.H"

.def _c_int0

.text

_c_int0

CALL SYSINIT ;调系统初始化程序

CALL SPI_INIT ;调SPI初始化程序LOOP:CALL SPI_SEND ;调输出三角波程序NOP

W AIT:LDP #DP_USER

SPLK #00H,SPI_FLAG ;清标志

SPLK #00H,SPI_DA TA ;重置初值

B LOOP

;(2)系统初始化程序

SYSINIT:

SETC INTM

CLRC SXM

CLRC OVM

CLRC CNF

LDP #0E0H

SPLK #81FEH,SCSR1 ;4倍频CLKIN=6 M,CLKOUT=24 M

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 MCRC

AND #0FFFEH ;配置IOPE0为一般的I/O口功能

SACL MCRC ;CS=IOPE0

LDP #DP_PF1

SPLK #004FH,SPICCR ;配置SPI寄存器允许初始化,16位数据输出

SPLK #0006H,SPICTL ;主机方式,时钟方式为无延时的下降沿

SPLK #0002H,SPIBRR ;SPI波特率为6 MHz

SPLK #00CFh,SPICCR ;初始化结束,并关闭初始化使能位

LDP #DP_USER

SPLK #00H,SPI_DA TA ;置发送数据初值

SPLK #00H,SPI_FLAG ;SPI_FLAG=0000H,执行三角波上

;SPI_FLAG=0001H,执行三角波下降SPLK #DACOUT,SPI_CON ;送MAX5121的控制字

RET

;(4)输出三角波程序

SPI_SEND:

SPI_TX:LDP #DP_PF2

LACL PEDA TDIR

OR #0100H ;IOPE0 脚为输出方式

AND #0FFFEH ;CS= IOPE0=0

SACL PEDA TDIR

NOP

NOP

LDP #DP_USER

LACC SPI_DA TA

AND #01FFEH ;S0=0

OR SPI_CON

SACL SPI_DA TA ;规格化发送的数据

LDP #DP_PF1

SACL SPITXBUF ;数据写入到SPI发送缓冲区XMIT_RDY:BIT SPISTS,BIT6 ;等待数据

BCND XMIT_RDY,NTC ;发送完

NOP

NOP

NOP

LDP #DP_PF2

LACL PEDA TDIR

OR #0101H ;CS=IOPE0=1

SACL PEDA TDIR ;锁存数据

LDP #DP_USER

BIT SPI_FLAG,BIT0

BCND SPI_FALL,TC

LDP #DP_USER ;三角波上升段程序

LACC SPI_DA TA

AND #01FFEH

ADD #02H ;递增

SACL SPI_DA TA

SUB #01FFEH

BCND SPI_FALL,EQ

B SPI_TX

SPI_FALL:LDP #DP_USER ;三角波下降段程序

SPLK #01,SPI_FLAG

LACC SPI_DA TA

AND #01FFEH

SUB #02H ;递减

SACL SPI_DA TA

BCND SPI_RET,EQ

B SPI_TX

SPI_RET:RET

相关主题
相关文档
最新文档