📄 510_spi_slave.dt
字号:
;****************************************************************;
; 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -