message '----------------------------------------------------------------------------------------------------'
message '< HXT_IIC.asm >'
message 'library: BS83Bxx_LIB_V300_20110527 '
message 'Date: 2011/5/30'
#define HXT_IIC_MODE
#define IIC_ADDRESS 0A0H
;*******************************************************************
#define CMD_R_Lib_VersionL 00H
#define CMD_R_Lib_VersionH 01H
#define CMD_R_KeyAmount 02H
#define CMD_R_EE_Status 03H
#define CMD_R_TK_Select0 04H
#define CMD_R_TK_Select1 CMD_R_TK_Select0+1
#define CMD_R_TK_Select2 CMD_R_TK_Select0+2
#define CMD_R_TK_Select3 CMD_R_TK_Select0+3
#define CMD_R_KeyStatus0 08H
#define CMD_R_KeyStatus1 CMD_R_KeyStatus0+1
#define CMD_R_KeyStatus2 CMD_R_KeyStatus0+2
#define CMD_R_KeyStatus3 CMD_R_KeyStatus0+3
#define CMD_R_K1_Freq 010H
#define CMD_R_K1_Ref 050H
#define CMD_R_K1_Offset 090H
#define CMD_R_K1_RCC 0B0H
#define CMD_RW_Global 0D0H
#define CMD_RW_DeviceA CMD_RW_Global+0
#define CMD_RW_DeviceB CMD_RW_Global+1
#define CMD_RW_KeyAmount CMD_RW_Global+2
#define CMD_RW_OptionA CMD_RW_Global+3
#define CMD_RW_OptionB CMD_RW_Global+4
#define CMD_RW_OptionC CMD_RW_Global+5
;#define CMD_RW_ CMD_RW_Global+6
;#define CMD_RW_ CMD_RW_Global+7
#define CMD_RW_K1_TH CMD_RW_Global+8
;*********************************************************************
IFDEF BS83B08
#define IIC_KT_LEN 8
message 'IIC_KeyThreshold len 8'
ENDIF
IFDEF BS83B12
#define IIC_KT_LEN 12
message 'IIC_KeyThreshold len 12'
ENDIF
IFDEF BS83B16
#define IIC_KT_LEN 16
message 'IIC_KeyThreshold len 16'
ENDIF
IFDEF BS85B12
#define IIC_KT_LEN 12
message 'IIC_KeyThreshold len 12'
ENDIF
IFDEF BS85C20
#define IIC_KT_LEN 20
message 'IIC_KeyThreshold len 20'
ENDIF
;-GLOBE DATA INDEX DEFINE
TKS_OPTIONA EQU 0
TKS_OPTIONB EQU 1
TKS_OPTIONC EQU 2
KEY1_THR EQU 3
HXT_IIC_TEST_RAM .SECTION 'DATA'
;=====================================================================
IIC_EE_STATUS LABEL BYTE
IIC_bRW_EE DBIT ;0
IIC_bEE_ReLoad DBIT ;1
IIC_bWriteEE DBIT ;2
IIC_EE_STS_BIT3 DBIT ;3
IIC_EE_STS_BIT4 DBIT ;4
IIC_EE_STS_BIT5 DBIT ;5
IIC_EE_STS_BIT6 DBIT ;6
IIC_bEE_ERROR DBIT ;7
;=====================================================================
IIC_ADDRF DBIT
IIC_READ_BUF DB ?
IIC_WRITE_BUF DB ?
IIC_ADDR_INDEX DB ?
;--
;=====================================================================
;.............................................
IIC_LibVer DB 2 DUP(?)
IIC_GlobalOption DB 8 DUP(?)
IIC_KeyThreshold DB IIC_KT_LEN DUP(?)
IIC_CheckSUM DB ?
;.............................................
IIC_KEY_AMOUNT DB ?
IIC_EE_ADDR_BUF DB ?
IFDEF BS83B08
IIC_KEY_STATUS DB ?
message 'IIC_KEY_STATUS1 1 Byte'
ENDIF
IFDEF BS83B12
IIC_KEY_STATUS DB 2 DUP(?)
message 'IIC_KEY_STATUS 2 Bytes'
ENDIF
IFDEF BS83B16
IIC_KEY_STATUS DB 2 DUP(?)
message 'IIC_KEY_STATUS 2 Bytes'
ENDIF
IFDEF BS85B12
IIC_KEY_STATUS DB 2 DUP(?)
message 'IIC_KEY_STATUS 2 Bytes'
ENDIF
IFDEF BS85C20
IIC_KEY_STATUS DB 3 DUP(?)
message 'IIC_KEY_STATUS 3 Bytes'
ENDIF
;=====================================================================
;*********************************************************************
;*********************************************************************
HXT_IIC_TEST_CODE .SECTION 'CODE'
;*******************************************************************
//HXT_IIC_TEST:
void HXT_IIC_TEST(){
#asm
SNZ IIC_bEE_ReLoad
JMP $+3
CLR IIC_bEE_ReLoad
CALL LoadEEPROM
SZ IIC_bWriteEE
CALL _WRITE_EE
SNZ _SCAN_CYCLEF
RET
;-READ KEY STATUS
CALL _GET_KEY_BITMAP
MOV A,_DATA_BUF[0]
MOV IIC_KEY_STATUS[0],A
IFNDEF BS83B08
MOV A,_DATA_BUF[1]
MOV IIC_KEY_STATUS[1],A
IFDEF BS85C20
MOV A,_DATA_BUF[2]
MOV IIC_KEY_STATUS[2],A
ENDIF
ENDIF
RET
;*******************************************************************
;*******************************************************************
HXT_IIC_INITIAL:
SET PAC.0 ;SDA input
SET PAC.2 ;SCL input
SET PAPU.0
SET PAPU.2
;--
MOV A,11000010B ;I2C Mode ,Enable SIM
MOV SIMCTL0,A
MOV A,IIC_ADDRESS
MOV SIMAR,A
CLR HTX
CLR TXAK
SET RNIC
;--
CLR SIMF ;Clear SIM interrupt request flag
CLR I2CTOEN
SET ESIMI
JMP LoadEEPROM
;*******************************************************************
;;***********************************************************
;;*SUB. NAME: *
;;*INPUT : *
;;*OUTPUT : *
;;*USED REG.: *
;;*FUNCTION : *
;;***********************************************************
;;*******************
HXT_IIC_INT: ;;* SIM INT. ********
;;*******************
CLR SIMF ;clear SIM. INT. flag
;-PUSH DATA
MOV STACK[0],A
MOV A,STATUS
MOV STACK[1],A
MOV A,MP1
MOV STACK[2],A
MOV A,BP
MOV STACK[3],A
;-CHECK IF ADDRESS MATCH
SNZ HAAS ;0:read/write data 1:address match
JMP IIC_CONTINUE_RW
;----------------
;-ADDRESS MATCH -
;----------------
SNZ SRW ;0:master wants to write data 1:master wants to read data
JMP FIRST_WRITE
;-FIRST READ (PREPARE DATA)
SET HTX
MOV A,IIC_READ_BUF
MOV SIMDR,A
JMP IIC_READ_ENTRY
FIRST_WRITE: ;-FIRST WRITE
CLR HTX ;receive mode (master write)
CLR TXAK ;enable transmits acknowledge
MOV A,SIMDR ;DUMMY READ
CLR IIC_ADDRF
JMP ENDIIC
;------------------------
IIC_CONTINUE_RW:;-IIC CONTINUE READ/WRITE
;------------------------
SZ HTX
JMP IIC_MASTER_READ
;-IIC MASTER WRITE (ADDRESS & DATA)
CLR HTX ;receive mode (master write)
CLR TXAK ;enable transmits acknowledge
MOV A,SIMDR ;RX DATA
MOV IIC_WRITE_BUF,A
;--
SZ IIC_ADDRF
JMP IIC_WRITE_ENTRY
;-GET 1ST BYTE (ADDRESS)
MOV IIC_ADDR_INDEX,A
SET IIC_ADDRF
JMP IIC_PRE_READ ;PR-READ DATA
;------------------------
IIC_MASTER_READ:;-MASTER WANTS TO READ -
;------------------------
;;SET HTX ;transmit mode (master read)
;-ACK
SZ RXAK
JMP IIC_READ_END
MOV A,IIC_READ_BUF
MOV SIMDR,A
JMP IIC_READ_ENTRY
IIC_READ_END: ;-NO ACK & END OF READ
CLR HTX ;receive mode (master write)
CLR TXAK ;enable transmits acknowledge
MOV A,SIMDR ;DUMMY READ (NO ACK)
JMP ENDIIC
;--------------------------
ENDIIC: ;-END OF IIC INT & POP DATA
;--------------------
- 1
- 2
- 3
- 4
- 5
- 6
前往页