⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lpc932spi.inc

📁 LPC932的SPI接口应用
💻 INC
字号:
;------------------------------------------------------------------
;	  	P89LPC932芯片SPI软件包
;  
;    LPC932提供有一种高速串行通信接口---SPI接口。SPI是一种全
; 双工、高速、同步的通信总线,有两种操作模式:主模式和从模式。
;    LPC932支持高达3Mbit/s的速率,还具有传输完成标志和写冲突标
; 志保护。采用典型的SPI配置,单主机,单从机/多从机方式,即主机的
; 任何端口均可驱动从机的/SS。也可使用互为主从的方法。
;    在SSIG=1方式下,或未使用SPI功能时,/SS脚用作IO口。


; SPI工作模式设置字,用户可根据自已的需要配制总线。
SSSIG	EQU	80H
SSPEN	EQU	40H
SDORD	EQU	20H
SMSTR	EQU	10H
SCPOL	EQU	08H
SCPHA	EQU	04H
SSPR1	EQU	02H
SSPR0	EQU	01H

; 主机方式,DORD为0,即数据的MSB最先发送;CPOL为0,即SPICLK平时为低电平;
; CPHA为0,即前时钟沿被采样,后时钟沿被改变;SPI时钟先择为CPU时钟/4,可
; 用MSTRMODE+[SSPR1]+[SSPR0]来设置SPI时钟。
; 此模式下,/SS作为一般IO使用
MSTRMODE	EQU	SSSIG+SSPEN+SMSTR


; 从机方式,SSIG=0,使用/SS脚为从机选择,可用于多从机方式。若使用SSIG=1,
; 则此从机一直接收总线上的信息,即单从机方式。SPI时钟先择为CPU时钟/4。
; 作为从机时,当CPHA=0,则要设置SSIG=0。
SLAVEMODE	EQU	SSPEN	


; 单主机,单从机模块设置
MSTRMODE1	EQU	SSSIG+SSPEN+SMSTR+SCPHA
SLAVEMODE1	EQU	SSSIG+SSPEN+SCPHA


; 互为主从方式(默认为主)
; 此时/SS脚要设置为输入态/准双向口态,以便MCU根据/SS脚上的电平来确定是作
; 主机还是作从机,若由主机变为从机时,SPIF将会置位,且MSTR位被自动清除;
; 否则,无法切换为从机。成为从机后,若要恢复为主机,则要重新设置。
; 当作使用互为主从方式时,用户的程序要监控MSTR位,确定当前是为主机还是从
; 机,即可作出相应的操作。
MSTR_SLAVEMODE	EQU	SSPEN+SMSTR


OFFSPI		EQU	SSSIG+SMSTR	; 关闭SPI接口




;------------------------------------------------------------------
; 名称:SETSPI 
; 功能:总线设置
; 入口参数:ACC		SPI设置字
; 注:程序会清零SPI状态标志位
;------------------------------------------------------------------
SETSPI:
   	MOV	SPCTL,A
	MOV	SPSTAT,#0C0H	; 清除SPI状态标志位
	RET


;------------------------------------------------------------------
; 名称:MSEND_DAT
; 功能: 主机发送数据,并接收从机传送过来的数据
; 入口参数:ACC		所要发送的数据
; 出口参数:ACC		接收到从机传送过来的数据
; 注:程序采有查询方式等待数据发送完毕
;     MSTRMODE模式中,发送数据前要选择好从机
;     若不想发送数据,可以直接使用MOV  A,SPDAT
;------------------------------------------------------------------
MSEND_DAT:
	MOV	SPSTAT,#0C0H	; 清除SPI状态标志位
	MOV	SPDAT,A		; 写入据入SPI数据寄存器
MSEND_DL1:
	MOV	A,SPSTAT
	ANL	A,#80H
	JZ	MSEND_DL1	; 等待SPIF为1,即发送数据完毕
	NOP
	MOV	A,SPDAT
	RET


;------------------------------------------------------------------
; 名称:SSEND_DAT
; 功能:从机发送数据
; 入口参数:ACC		所要发送的数据
; 出口参数:ACC		SPI状态字。若为00则表明数据已正确写入数据缓冲区。
; 注:(从机发送)若WCOL为1,则表明此数据未发送。
;------------------------------------------------------------------
SSEND_DAT:
	MOV	SPSTAT,#0C0H	; 清除SPI状态标志位
	MOV	SPDAT,A		; 写入据入SPI数据寄存器
	MOV	A,SPSTAT
	RET


;------------------------------------------------------------------
; 名称:MRCV_DAT
; 功能:取出上一次接收到的数据(主机)。
; 出口参数:ACC		所读取到的数据
; 注:子程序会清除SPI状态字。
;------------------------------------------------------------------
MRCV_DAT:
        MOV	SPSTAT,#0C0H
	MOV	A,SPDAT
	RET

;------------------------------------------------------------------
; 名称:SRCV_DAT
; 功能:从机读取数据(无等待)
; 入口参数:无
; 出口参数:ACC		读出的数据
;           C		为1时表示接收正确(新的数据)
; 注:子程序会清除SPI状态字。
;------------------------------------------------------------------
SRCV_DAT:
	CLR	C
	MOV	A,SPSTAT
	ANL	A,#80H
	JZ	SRCV_DL1
	MOV	SPSTAT,#0C0H
	SETB	C		; 若是新的数据,则置位C
SRCV_DL1:
        MOV	A,SPDAT
	RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -