📄 spi_mt_com.dt
字号:
;****************************************************************;
; TILTE: EM78P510 SPI Transfer DEMO CODE ;
; FUNCTION: EM78P510 SPI Transfer as Master ;
; COMPANY: ELAN MICROELECTRONICS (SZ) LTD. ;
;****************************************************************;
; EM78P510 as MASTER,
; send and receive date
; Fmain: crystal, Fsub: crystal
;-----------------------------------------------------------------
R0 == 0x00 ; Indirect Address Register
TCC == 0x01 ; Time Clock/Counter
PC == 0x02 ; Program Counter & Stack
STATUS == 0x03 ;
C == 0 ; Carry flag
Z == 2 ; Zero flag
R4 == 0x04 ; RAM Select Register
PORTA == 0x0A ; PortA I/O register
TWTCR == 0x0D ; TCC and WDT timer control register
RE == 0x0E ; Interrupt mask register
RF == 0x0F ; Interrupt status register
Data_Buf == 0x1F ; Data 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
;-----------------------------------------------------------------
ORG 0x00
JMP Main
ORG 0x20
;-----------------------------------------------------------------
Main:
MOV A, @0x0D ; Disable WDT, TCC clock source is Fsub
MOV TWTCR, A ; Tcc 0.5s overflow
CLR TCC ; Clear TCC
CLR Data_Buf ; Clear data_buf
CLR PORTA ; PortA output logic "0"
MOV A, @0x01
MOV RE, A ; Enable TCC interrupt
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, @01001100b ; Data shift out rising edge, is on hold during low
MOV SPIC, A ; Enable SPI mode, after data output sdo remain low
; Selecting SPI Baud Rate is Fosc/32
LOOP1:
CLR Data_Buf
MOV A, @0xD0 ; The start address is 0x10
MOV R4, A
LOOP2:
MOV A, Data_Buf ; To get data to transfer
CALL Data_Tbl
BANK 2
MOV SPIW, A ; Write data to buffer
BS SPIC, SSE ; Start to shift the data
JBC SPIC, SSE ; Finish to shift 8 bits?
JMP $-1
JBS SPIS, RBF ; Finish to receive 8 bits?
JMP $-1
NOP
MOV A, SPIR ; Read the data received.
MOV R0, A
;BC SPIS, RBF
INC R4
BANK 0
JBS RF, 0 ; Wait for 0.5s
JMP $-1
CLR RF ; Clear TCC flag
INC Data_Buf
MOV A, @0x0A
SUB A, Data_Buf
JBS STATUS, C ; Finish to receive 10 bytes data?
JMP LOOP2 ; Receive next byte data
JMP LOOP1 ; Repeat to receive next 10 bytes data
;-----------------------------------
Data_Tbl:
ADD PC, A
RETL 0xFE ; 0
RETL 0xFC ; 1
RETL 0xF8 ; 2
RETL 0xF0 ; 3
RETL 0xE0 ; 4
RETL 0xC0 ; 5
RETL 0x80 ; 6
RETL 0x00 ; 7
RETL 0x55 ; 8
RETL 0xAA ; 9
NOP
NOP
;-----------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -