📄 spi-bk.asm
字号:
.include "F2407REGS.H"
.def _c_int0
.data
INPUT_DATA: .word 000H,001H,002H,003H,004H,005H,006H,007H
OUTPUT_DATA: .word 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
INPUT_INDEX: .word 0
.text
INPUT_SIZE: .set 8
CMD_SPI_WRITE .set 0140H
CMD_SPI_READ .set 0300H
CMD_SPI_EARSE .set 01C0H
CMD_SPI_EWEN .set 0130H
CMD_SPI_EWDS .set 0100H
CMD_SPI_ERAL .set 0120H
CMD_SPI_WRAL .set 0110H
_c_int0
CALL SYSINIT ;调系统初始化程序
CALL SPIINIT ;调SPI初始化程序
SPI_TEST:
CALL EARSE_ENABLE
CALL WRITE_DATA
CALL READ_DATA
MAIN_LOOP:
NOP
B MAIN_LOOP
SYSINIT:
SETC INTM
CLRC SXM
CLRC OVM
CLRC CNF
LDP #0E0H
SPLK #81FEH, SCSR1 ;4倍频CLKIN=10 M, CLKOUT=40 M
SPLK #0E8h, WDCR ;关看门狗
RET
SPIINIT:
LDP #DP_PF2
LACL MCRB
OR #001CH ;配置SPISIMO,SPISIMI和SPICLK引脚为特殊功能方式
SACL MCRB
LDP #DP_PF1
SPLK #004FH, SPICCR ;配置SPI寄存器允许初始化, 16位数据输出
SPLK #0007H, SPICTL ;主机方式, 时钟方式为无延时的下降沿
SPLK #004FH, SPIBRR ;SPI波特率为512KHz
SPLK #00CFH, SPICCR ;初始化结束, 并关闭初始化使能位
CLRC XF
RET
ENABLE_SPI:
SETC XF
CALL DELAY
LDP #DP_PF1
RET
DISABLE_SPI:
CLRC XF
CALL DELAY
RET
WAIT_TXRX:
LACC SPIRXBUF
LOOP_TXRX:
BIT SPISTS, BIT6 ;等待数据
BCND LOOP_TXRX, NTC ;发送完
RET
DELAY: RPT #0FFH
NOP
RET
EARSE_ALL:
CALL ENABLE_SPI ;SET CS HIGH
LACC #CMD_SPI_ERAL
SACL SPITXBUF ;数据写入到SPI发送缓冲区
CALL WAIT_TXRX
CALL DISABLE_SPI
RET
EARSE_ENABLE:
WRITE_ENABLE:
CALL ENABLE_SPI ;SET CS HIGH
LACC #CMD_SPI_EWEN
SACL SPITXBUF ;数据写入到SPI发送缓冲区
CALL WAIT_TXRX
CALL DISABLE_SPI
RET
EARSE_DISABLE:
WRITE_DISABLE:
CALL ENABLE_SPI ;SET CS HIGH
LACC #CMD_SPI_EWDS
SACL SPITXBUF ;数据写入到SPI发送缓冲区
CALL WAIT_TXRX
CALL DISABLE_SPI
RET
EARSE: ;0x1C0 | ADDR_6
CALL ENABLE_SPI ;SET CS HIGH
LDP #DP_PF1 ;WRITE COMMAND
;LACC #CMD_SPI_EARSE | ADDR_6
SACL SPITXBUF ;数据写入到SPI发送缓冲区
CALL WAIT_TXRX
CALL DISABLE_SPI
RET
WRITE_ALL
CALL ENABLE_SPI ;SET CS HIGH
LACC #CMD_SPI_WRAL
SACL SPITXBUF ;数据写入到SPI发送缓冲区
CALL WAIT_TXRX
CALL DISABLE_SPI
RET
READ_DATA: ;CMD : 0x180 | ADDR_6 , DATA16
LAR AR0,#INPUT_INDEX
LAR AR1,#OUTPUT_DATA
LDP #DP_B01
LACC #0
SACL INPUT_INDEX
READ_DATA_LOOP:
CALL ENABLE_SPI ;SET CS HIGH
LDP #DP_B01
LACC #CMD_SPI_READ ;WRITE COMMAND
ADD INPUT_INDEX, 1
LAR AR2, INPUT_INDEX
MAR *, AR2
ADRK #1
SAR AR2, INPUT_INDEX
LDP #DP_PF1
SACL SPITXBUF ;数据写入到SPI发送缓冲区
CALL WAIT_TXRX
LACC #0
SACL SPITXBUF ;数据写入到SPI发送缓冲区
CALL WAIT_TXRX
CALL DISABLE_SPI
LACL SPIRXBUF ;数据写入到SPI发送缓冲区
;LDP #DP_B01
MAR *, AR1
SACL *+
CMPR 00
BCND READ_DATA_LOOP, NTC
RET
WRITE_DATA:
LAR AR0,#OUTPUT_DATA
LAR AR1,#INPUT_DATA
LDP #DP_B01
LAR AR2, #0
SAR AR2, INPUT_INDEX
WRITE_DATA_LOOP:
CALL ENABLE_SPI ;SET CS HIGH
LACC #140H ;WRITE COMMAND
LDP #DP_B01
ADD INPUT_INDEX
LAR AR2, INPUT_INDEX
MAR *, AR2
ADRK #1
SAR AR2, INPUT_INDEX
LDP #DP_PF1
SACL SPITXBUF ;数据写入到SPI发送缓冲区
CALL WAIT_TXRX
;LDP #DP_B01
MAR *, AR1
LACC *+
;LACC #01349H ;WRITE DATA
LDP #DP_PF1
SACL SPITXBUF ;数据写入到SPI发送缓冲区
CALL WAIT_TXRX
CALL DISABLE_SPI ;SET CS LOW
CALL WAIT_WR_RDY
MAR *, AR1
CMPR 00
BCND WRITE_DATA_LOOP, NTC
RET
WAIT_WR_RDY:
CALL ENABLE_SPI
WAIT_WR_LOOP:
LACC #0000H ;
SACL SPITXBUF
CALL WAIT_TXRX
LACL SPIRXBUF ;数据写入到SPI发送缓冲区
BCND WAIT_WR_LOOP, EQ
CALL DISABLE_SPI
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -