238 lines
4 KiB
NASM
238 lines
4 KiB
NASM
|
;;-----------------------------------------------
|
||
|
;;function: QN8072_I2C_Read_Data
|
||
|
;;in: mFMAddr
|
||
|
;;out: mFMData
|
||
|
;;description: Read AS6600 data
|
||
|
;;-----------------------------------------------
|
||
|
QN8072_I2C_Read_Data:
|
||
|
|
||
|
L_I2CRd_Data_lp:
|
||
|
CLR WDT
|
||
|
|
||
|
CLR mFMACK
|
||
|
CALL I2C_START
|
||
|
MOV A,QN8072_I2C_WRITE_ADDR
|
||
|
MOV mFMSend,A ;;Set send data
|
||
|
CALL Write_I2C_Byte ;;Send data
|
||
|
|
||
|
MOV A,mFMAddr
|
||
|
MOV mFMSend,A
|
||
|
CALL Write_I2C_Byte
|
||
|
|
||
|
MOV A,mFMACK
|
||
|
OR A,0
|
||
|
SNZ Z ;;Z=1,OK
|
||
|
JMP L_I2CRd_Data_lp
|
||
|
;;
|
||
|
L_I2CRd_Data_lp2:
|
||
|
CLR WDT
|
||
|
|
||
|
CLR mFMACK
|
||
|
CALL I2C_START
|
||
|
|
||
|
MOV A,QN8072_I2C_READ_ADDR
|
||
|
MOV mFMSend,A ;;Set send data
|
||
|
CALL Write_I2C_Byte ;;Send data
|
||
|
|
||
|
MOV A,mFMACK
|
||
|
OR A,0
|
||
|
SNZ Z ;;Z=1,OK
|
||
|
JMP L_I2CRd_Data_lp2
|
||
|
|
||
|
CALL Read_I2C_Byte
|
||
|
MOV mFMData,A
|
||
|
CALL sendNoAck
|
||
|
|
||
|
CALL I2C_STOP
|
||
|
RET
|
||
|
|
||
|
;;-----------------------------------------------
|
||
|
;;function: QN8027_I2C_Write_Data
|
||
|
;;in: mFMAddr,mFMData
|
||
|
;;out:
|
||
|
;;description: Write QN8027 data
|
||
|
;;-----------------------------------------------
|
||
|
QN8027_I2C_Write_Data:
|
||
|
|
||
|
L_I2CWt_Data_lp:
|
||
|
CLR WDT
|
||
|
|
||
|
CLR mFMACK
|
||
|
CALL I2C_START
|
||
|
MOV A,QN8072_I2C_WRITE_ADDR
|
||
|
MOV mFMSend,A ;;Set send data
|
||
|
CALL Write_I2C_Byte ;;Send data
|
||
|
|
||
|
MOV A,mFMAddr
|
||
|
MOV mFMSend,A
|
||
|
CALL Write_I2C_Byte
|
||
|
|
||
|
MOV A,mFMData
|
||
|
MOV mFMSend,A
|
||
|
CALL Write_I2C_Byte
|
||
|
|
||
|
CALL I2C_STOP
|
||
|
|
||
|
MOV A,mFMACK
|
||
|
OR A,0
|
||
|
SNZ Z ;;Z=1,OK
|
||
|
JMP L_I2CWt_Data_lp
|
||
|
|
||
|
RET
|
||
|
|
||
|
;;-----------------------------------------------
|
||
|
;;function: Delay5us
|
||
|
;;in: NULL
|
||
|
;;out: NULL
|
||
|
;;description: Delay 5us
|
||
|
;;-----------------------------------------------
|
||
|
Delay5us:
|
||
|
JMP $+1
|
||
|
JMP $+1
|
||
|
JMP $+1
|
||
|
JMP $+1
|
||
|
JMP $+1
|
||
|
JMP $+1
|
||
|
JMP $+1
|
||
|
NOP
|
||
|
RET
|
||
|
|
||
|
;;-----------------------------------------------
|
||
|
;;function: sendAck
|
||
|
;;in: NULL
|
||
|
;;out: NULL
|
||
|
;;description: Send ACK
|
||
|
;;-----------------------------------------------
|
||
|
sendAck:
|
||
|
CLR P_SDA ;;0
|
||
|
CALL Delay5us
|
||
|
|
||
|
SET P_SCL
|
||
|
CALL Delay5us
|
||
|
CLR P_SCL
|
||
|
CALL Delay5us
|
||
|
RET
|
||
|
|
||
|
;;-----------------------------------------------
|
||
|
;;function: sendNoAck
|
||
|
;;in: NULL
|
||
|
;;out: NULL
|
||
|
;;description: Send No ACK
|
||
|
;;-----------------------------------------------
|
||
|
sendNoAck:
|
||
|
SET P_SDA ;;1
|
||
|
CALL Delay5us
|
||
|
|
||
|
SET P_SCL
|
||
|
CALL Delay5us
|
||
|
CLR P_SCL
|
||
|
CALL Delay5us
|
||
|
RET
|
||
|
|
||
|
;;-----------------------------------------------
|
||
|
;;function: Read_I2C_Byte
|
||
|
;;in: NULL
|
||
|
;;out: ACC
|
||
|
;;description: Read data
|
||
|
;;-----------------------------------------------
|
||
|
Read_I2C_Byte:
|
||
|
CLR mFMSend
|
||
|
MOV A,8D
|
||
|
MOV mFMCnt,A
|
||
|
|
||
|
SET P_SDAC ;;SDA input
|
||
|
L_ReadI2C_lp:
|
||
|
CLR C
|
||
|
RLC mFMSend
|
||
|
|
||
|
CLR P_SCL
|
||
|
CALL Delay5us
|
||
|
SET P_SCL
|
||
|
CALL Delay5us
|
||
|
|
||
|
SZ P_SDA
|
||
|
SET mFMSend.0 ;;save data
|
||
|
|
||
|
SDZ mFMCnt
|
||
|
JMP L_ReadI2C_lp
|
||
|
|
||
|
CLR P_SCL
|
||
|
CLR P_SDAC ;;SDA Output
|
||
|
CALL Delay5us
|
||
|
|
||
|
MOV A,mFMSend
|
||
|
RET
|
||
|
|
||
|
;;-----------------------------------------------
|
||
|
;;function: Write_I2C_Byte
|
||
|
;;in: mFMSend
|
||
|
;;out: mFMAck
|
||
|
;;description: Write data
|
||
|
;;-----------------------------------------------
|
||
|
Write_I2C_Byte:
|
||
|
MOV A,8D
|
||
|
MOV mFMCnt,A
|
||
|
|
||
|
L_WriteI2C_lp:
|
||
|
SZ mFMSend.7
|
||
|
SET P_SDA
|
||
|
SNZ mFMSend.7
|
||
|
CLR P_SDA
|
||
|
|
||
|
RLC mFMSend ;;Next bit
|
||
|
|
||
|
CALL Delay5us
|
||
|
SET P_SCL
|
||
|
CALL Delay5us
|
||
|
CLR P_SCL
|
||
|
|
||
|
SDZ mFMCnt
|
||
|
JMP L_WriteI2C_lp ;;Send data
|
||
|
|
||
|
;;Get ACK
|
||
|
CALL Delay5us
|
||
|
SET P_SDAC ;;SDA input
|
||
|
CALL Delay5us
|
||
|
SET P_SCL
|
||
|
CALL Delay5us
|
||
|
SZ P_SDA
|
||
|
INC mFMACK ;;ACK=1,error
|
||
|
|
||
|
CLR P_SCL
|
||
|
CALL Delay5us
|
||
|
CLR P_SDAC ;;SDA output
|
||
|
RET
|
||
|
|
||
|
;;-----------------------------------------------
|
||
|
;;function: I2C_START
|
||
|
;;in: NULL
|
||
|
;;out: NULL
|
||
|
;;description: IIC Start
|
||
|
;;-----------------------------------------------
|
||
|
I2C_START:
|
||
|
SET P_SDA ;;Dat H
|
||
|
CALL Delay5us
|
||
|
SET P_SCL ;;CLK H
|
||
|
CALL Delay5us
|
||
|
CLR P_SDA ;;Dat L
|
||
|
CALL Delay5us
|
||
|
CLR P_SCL ;;CLK L
|
||
|
CALL Delay5us
|
||
|
RET
|
||
|
|
||
|
;;-----------------------------------------------
|
||
|
;;function: I2C_Stop
|
||
|
;;in: NULL
|
||
|
;;out: NULL
|
||
|
;;description: IIC Stop
|
||
|
;;-----------------------------------------------
|
||
|
I2C_Stop:
|
||
|
CLR P_SDA ;;Dat L
|
||
|
CALL Delay5us
|
||
|
SET P_SCL ;;CLK L
|
||
|
CALL Delay5us
|
||
|
SET P_SDA ;;Dat H
|
||
|
CALL Delay5us
|
||
|
RET
|
||
|
|