510_spi_slave.dt
来自「台弯义隆芯片spi控制使用设计实例说明Application of spi in」· DT 代码 · 共 61 行
DT
61 行
;****************************************************************;
; TILTE: EM78P510 SPI Transfer DEMO CODE ;
; FUNCTION: EM78P510 SPI Transfer as Slaver ;
; COMPANY: ELAN MICROELECTRONICS (SZ) LTD. ;
;****************************************************************;
; EM78P510 as SLAVER,
; Fmain: crystal, Fsub: crystal
;-----------------------------------------------------------------
R0 == 0x00 ; Indirect Address Register
R4 == 0x04 ; RAM Select Register
PORTA == 0x0A ; PortA IO register
TWTCR == 0x0D ; TCC and WDT timer control register
BUFFER == 0x1F ; Buffer
; Bank 2
SPIS == 0x0C ; SPI status register
RBF == 0
SPIC == 0x0D ; SPI control register
SSE == 4 ; SPI shift enable bit
SPIR == 0x0E ; SPI read buffer
SPIW == 0x0F ; SPI write buffer
; Bank 4
PIOCRA == 0x0A ; PortA I/O control register
PIOCR9 == 0x09 ; Port9 IO control register
;-----------------------------------------------------------------
ORG 0x00
JMP Main
ORG 0x20
;-----------------------------------------------------------------
Main:
MOV A, @0x00 ; Disable WDT
MOV TWTCR, A
MOV PORTA, A ; PortA output logic "0"
BANK 4
MOV A, @0x10 ; Set PA4 (SI) as input pin
MOV PIOCRA, A ; SO,SCK output pin
Bank 2
MOV A, @00100000b ; Shift left, SDO delay time: 16clk,
MOV SPIS, A ; disable open-drain
MOV A, @01101111b ; Data shift out rising edge, is on hold during low
MOV SPIC, A ; Enable SPI mode, after data output sdo remain low
; MCU is slaver
LOOP1:
MOV A, @0x0A ; Receive 10 byte data
MOV BUFFER, A
MOV A, @0xD0 ; The start address is 0x10
MOV R4, A
LOOP2:
BANK 2
BS SPIC, SSE ; Start to shift data
JBS SPIS, RBF ; Finish to receive 8 bits?
JMP $-1
NOP
MOV A, SPIR ; Read the data received.
;BC SPIS, RBF
MOV R0, A
INC R4
DJZ BUFFER ; Finish to receive 10 bytes data?
JMP LOOP2 ; Receive next byte data
JMP LOOP1 ; Repeat to receive next 10 bytes data
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?