📄 8733_i2c-master.dt
字号:
;****************************************************************;
; TILTE: eKTP8733 I2C TRANSMISSION DEMO CODE ;
; FUNCTION: eKTP8733 I2C FUNCTION ;
; COMPANY: ELAN MICROELECTRONICS (SZ) LTD. ;
;****************************************************************;
; 该范例用eKTP8733读写24C01,可读写单字节或多字节数据. Fc: IRC 4MHz
;-----------------------------------------------------------------
; bank 0
R0 == 0x00 ; Indirect Address Register
PC == 0x02 ; Program Counter & Stack
STATUS == 0x03 ;
C == 0 ; Carry flag
Z == 2 ; Zero flag
R4 == 0x04 ; RAM Select Register
PORT5 == 0x05 ; PORT5 I/O register
PORT6 == 0x06 ; PORT6 I/O register
PORT7 == 0x07 ; PORT7 I/O register
PORT8 == 0x08 ; PORT8 I/O register
B0RE == 0x0E
ISR1 == 0x0E ; Interrupt status register 1
TCIF == 4 ; TCC interrupt flag
B0RF == 0x0F
ISR2 == 0x0F ; Interrupt status register 2
I2CRIF == 7
I2CTIF == 6
; bank 1
IOC5 == 0x05 ; PORT5 I/O control register
IOC6 == 0x06 ; PORT6 I/O control register
IOC7 == 0x07 ; PORT7 I/O control register
IOC8 == 0x08 ; PORT8 I/O control register
WDTCR == 0x0C ; WDT timer control register
B1RE == 0x0E
IMR1 == 0x0E ; Interrupt mask register 1
B1RF == 0x0F
IMR2 == 0x0F ; Interrupt mask register 2
; bank 2
TCCCR == 0x05 ; Time Clock/Counter control register
; bank 3
TCC == 0x05 ; Time Clock/Counter
COBS1 == 0x06 ; Code option: Type&IRC calibration register
COBS2 == 0x07 ; Code option: LVR, Noise, IRC, RCOUT regist
I2CCR2 == 0x0B ; I2C status and control register 2
I2CCR1 == 0x0C ; I2C status and control register 1
Strobe == 7
Pend == 7
IMR == 6 ; I2C master/slave mode select bit
ISS == 5 ; I2C Fast/Standard mode select bit
STOP == 4 ;
SAR_EMPTY == 3
ACK == 2
FULL == 1
EMPTY == 0
I2CSA == 0x0D ; I2C slave address register
I2CDA == 0x0E ; I2C Device address register
I2CDB == 0x0F ; I2C data buffer
;
BUFFER == 0x1F ; Data buffer
;-----------------------------------------------------------------
ORG 0x00
JMP Main
ORG 0X12 ; I2C interrupt vector
LJMP I2C_INT ; To I2C interrupt program
ORG 0x50
;-----------------------------------------------------------------
I2C_INT:
BANK 0
JBS ISR2, I2CRIF
JMP NOT_RINT
BC ISR2, I2CRIF
; User code
; ...
NOT_RINT:
JBS ISR2, I2CTIF
JMP I2C_INT_RET
BC ISR2, I2CTIF
; User code
; ...
I2C_INT_RET:
RETI
;-----------------------------------------------------------------
Main:
NOP
BANK 0
CLR PORT5 ; PORT5 output logic "0"
CLR PORT6 ; PORT6 output logic "0"
CLR PORT7 ; PORT7 output logic "0"
CLR PORT8 ; PORT8 output logic "0"
BANK 1
CLR IOC5 ; Set port5 as output pin
CLR IOC6 ; Set port6 as output pin
CLR IOC7 ; Set port7 as output pin
CLR IOC8 ; Set port8 as output pin
MOV A, @0x00
MOV WDTCR, A ; Disable WDT
MOV A, @0x10
MOV IMR1, A ; Enable TCC interrupt
MOV A, @0x00
MOV IMR2, A ; Disable I2C interrupt
BANK 2
MOV A, @0x0D
MOV TCCCR, A ; TCC rate --> 1:256
BANK 3
MOV A, @0x3F ; Select ekt8733, irc: 1*F
MOV COBS1, A
MOV A, @0x30 ; Select IRC 4MHz
MOV COBS2, A
CLR TCC
BANK 3
MOV A, @00110001b ; I2C clock source select Fm and Enable I2C
MOV I2CCR2, A
BS I2CCR1, IMR ; Select master mode
Bc I2CCR1, ISS ; Select standard mode
;-----------------------------------------------------------------
MainStart:
;---------------------------------------------------------
; Write 8bytes data to 0x00~0x0F address of 24C01
;---------------------------------------------------------
MOV A, @0x08
MOV BUFFER, A
;
BANK 3
MOV A, @10100000b ; Write command word (Write data)
MOV I2CSA, A
BS I2CCR1, Strobe
JBS I2CCR1, SAR_EMPTY
JMP $-1
;
MOV A, @0x00 ; Write first address of 24C01
MOV I2CDB, A
BS I2CCR1, Strobe
JBS I2CCR1, EMPTY
JMP $-1
;
WriteDataLp:
MOV A, BUFFER ; Write data
CALL Data_Tbl
MOV I2CDB, A
BS I2CCR1, Strobe
MOV A, BUFFER
XOR A, @0x01
JBC status, Z
BS I2CCR1, STOP
JBS I2CCR1, EMPTY
JMP $-1
DJZ BUFFER
JMP WriteDataLp
;
BANK 0
CLR TCC
JBS ISR1, TCIF ; Wait for about 4.096ms to write data
JMP $-1
CLR ISR1 ; Clear TCC flag
;---------------------------------------------------------
; Read 8 byte data from 24C01
;---------------------------------------------------------
BANK 3
MOV A, @10100000b ; Write command word (Write data)
MOV I2CSA, A
BS I2CCR1, Strobe
JBS I2CCR1, SAR_EMPTY
JMP $-1
;
MOV A, @0x00 ; Write first address of 24C01
MOV I2CDB, A
BS I2CCR1, Strobe
JBS I2CCR1, EMPTY
JMP $-1
;
MOV A, @8
MOV BUFFER, A
MOV A, @0x10
MOV R4, A
;
MOV A, @10100001b ; Write command word (Read data)
MOV I2CSA, A
BS I2CCR1, Strobe
JBS I2CCR1, SAR_EMPTY
JMP $-1
;
ReadDataLp:
BS I2CCR1, Strobe
MOV A, BUFFER
XOR A, @0x01
JBC status, Z
BS I2CCR1, STOP
NOP
JBS I2CCR1, FULL
JMP $-1
MOV A, I2CDB
MOV R0, A
INC R4
DJZ BUFFER
JMP ReadDataLp
BANK 0
NOP
NOP
NOP
JMP $
;---------------------------------------------------------
Data_Tbl:
ADD PC, A
RET ; 0
RETL 0x07 ; 1
RETL 0x06 ; 2
RETL 0x05 ; 3
RETL 0x04 ; 4
RETL 0x03 ; 5
RETL 0x02 ; 6
RETL 0x01 ; 7
RETL 0x00 ; 8
END
;-----------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -