⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fm_i2cdrv2.msa

📁 5807收音机模块用于炬力平台
💻 MSA
📖 第 1 页 / 共 2 页
字号:
/********************************************************************************************philips TEA5767 FM module driver(I2C DRIVER)writen by Xuezhi. for 3951 S1last update 04-2-13 15:03********************************************************************************************///for FM_i2cdrv1         module   FM_I2CDRV2public   I2C_initpublic   I2C_exitpublic   WRITE_ONEFRAMEpublic   READ_STATUSpublic   FMwait50ms//from  FM_i2cdrv1extern   FREQ_RFextern   WSET_PLLLBextern   WSET_PLLHBextern   WRITE_BUFFERextern   READ_BUFFERextern   WSET_HLSIextern   FM_resultextern   disable_hosc//----------------------------------------------------- //output enable port#define     SDA_outport          0F3H#define     SDA_outport_num      01H//input enable port#define     SDA_inport           0F3H#define     SDA_inport_num       05H#define     SCL_outport          0F3H#define     SCL_outport_num      00h#define     SCL_inport           0F3h#define     SCL_inport_num       004h//data port#define     SDA_doport            0F4h#define     SDA_doport_num        01h#define     SDA_dinport           0F4h#define     SDA_dinport_num       01h#define     SCL_doport            0F4h#define     SCL_doport_num        00h#define     SCL_dinport           0F4h#define     SCL_dinport_num       00h//=====================================================            rseg    FM_CTRL_D//=====================================================FMupdatestatus:            PUSH    AF            PUSH    BC            PUSH    HL            CALL    LWRD I2C_start            LD      A,0C0H            LD      B,00H            CALL    LWRD I2Ctransbyte            CP      00H            JR      NZ,FMupdatestatus_exit            LD      HL,LWRD WRITE_BUFFER            LD      A,(HL)            LD      B,00H            CALL    LWRD  I2Ctransbyte            CP      00H            JR      NZ,FMupdatestatus_exit            LD      A,01H            LD      (LWRD FM_result),A            JR      FMupdatestatus_okFMupdatestatus_exit:            LD      A,00H            LD      (LWRD FM_result),AFMupdatestatus_ok:            CALL   LWRD  I2C_stop            POP    HL            POP    BC            POP    AF            RET//=========================================================WRITE_ONEFRAME:            PUSH    HL            PUSH    BC            CALL    LWRD I2C_start            LD      A,020H            LD      B,00H            CALL    LWRD I2Ctransbyte            CP      00H            JR      NZ,I2C_werror_exit            //LD      C,8            LD      HL,LWRD WRITE_BUFFERI2C_wr_nextbyte:            LD      A,(HL)            LD      B,00H            CALL    LWRD  I2Ctransbyte            CP      00H            JR      NZ,I2C_werror_exit            INC     HL            DEC     C            JR      NZ,I2C_wr_nextbyte            LD      A,01H            LD      (LWRD FM_result),A            JR      I2Cwstop_exitI2C_werror_exit:            LD      A,00H            LD      (LWRD FM_result),AI2Cwstop_exit:            CALL   LWRD  I2C_stop            LD     A,(LWRD FM_result)            POP    BC            POP    HL            RET//======================================READ_ONEFRAME:            PUSH    BC            PUSH    HL            CALL    LWRD  I2C_start            LD      A,021H            LD      B,01H            CALL    LWRD  I2Ctransbyte            CP      00H            JR      NZ,I2C_rerror_exit            LD      C,04H            LD      HL,LWRD READ_BUFFERI2C_rd_nextbyte:            LD      A,00h            CALL    LWRD  I2Crecebyte            LD      (HL),A            INC     HL            DEC     C            JR      NZ,I2C_rd_nextbyte            LD       A,01h            CALL    LWRD I2Crecebyte            LD      (HL),A            LD      A,01H            LD      (LWRD FM_result),A            JR      I2Crstop_exitI2C_rerror_exit:            LD      A,00H            LD      (LWRD FM_result),AI2Crstop_exit:            CALL    LWRD  I2C_stop            LD      A,(LWRD FM_result)            POP     HL            POP     BC            RET//===================================================I2C_init:        PUSH    AF        IN      A,(SDA_doport)        SET     SDA_doport_num,A        OUT     (SDA_doport),A        IN      A,(SCL_doport)        SET     SCL_doport_num,A        OUT     (SCL_doport),A        IN      A,(SDA_outport)        SET     SDA_outport_num,A        OUT     (SDA_outport),A        IN      A,(SCL_outport)        SET     SCL_outport_num,A        OUT     (SCL_outport),A        POP     AF        RET//--------------------------------------I2C_exit:        PUSH    AF        IN      A,(SDA_outport)        RES     SDA_outport_num,A        OUT     (SDA_outport),A        IN      A,(SCL_outport)        RES     SCL_outport_num,A        OUT     (SCL_outport),A        POP     AF        RET//===============================================I2C_start:                PUSH    AF                IN      A,(SDA_doport)                RES     SDA_doport_num,A                OUT     (SDA_doport),A                CALL    LWRD I2C_wait5us                IN      A,(SCL_doport)                RES     SCL_doport_num,A                OUT     (SCL_doport),A                POP     AF                RET//---------------------------------------------I2C_stop:                PUSH    AF                IN      A,(SCL_doport)                SET     SCL_doport_num,A                OUT     (SCL_doport),A                CALL    LWRD I2C_wait5us                IN      A,(SDA_doport)                SET     SDA_doport_num,A                OUT     (SDA_doport),A                POP     AF                RET//========================================================//========================================================//A 为待传数据,返回时A中为响应类型,0为ACK, 1为NACK//若为地址字节且欲读取数据,B为1,否则为0I2Ctransbyte:                PUSH    BC                LD      C,A                CALL    LWRD I2CSendbyte//SDA  output-->input                IN      A,(SDA_outport)                RES     SDA_outport_num,A                OUT     (SDA_outport),A                IN      A,(SDA_inport)                SET     SDA_inport_num,A                OUT     (SDA_inport),A//SCL output 1                CALL    LWRD I2C_wait5us                IN      A,(SCL_doport)                SET     SCL_doport_num,A                OUT     (SCL_doport),A                IN      A,(SDA_dinport)                BIT     SDA_dinport_num,A                JR      NZ,GetNACK                LD      C,00H                LD      A,B                CP      01H                JR      Z,I2Creadaddbyte                IN      A,(SDA_inport)                RES     SDA_inport_num,A                OUT     (SDA_inport),A                IN      A,(SDA_doport)                RES     SDA_doport_num,A                OUT     (SDA_doport),A                JR      ACKgetokI2Creadaddbyte:                CALL    LWRD I2C_wait5us                IN      A,(SCL_doport)                RES     SCL_doport_num,A                OUT     (SCL_doport),A                JR      I2CtransokGetNACK:                LD      C,01H                IN      A,(SDA_doport)                SET     SDA_doport_num,A                OUT     (SDA_doport),AACKgetok:                IN      A,(SDA_outport)                SET     SDA_outport_num,A                OUT     (SDA_outport),A                CALL    LWRD I2C_wait5us                IN      A,(SCL_doport)                RES     SCL_doport_num,A                OUT     (SCL_doport),A                IN      A,(SDA_doport)                RES     SDA_doport_num,A                OUT     (SDA_doport),AI2Ctransok:                LD      A,C                POP     BC                RET//==================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -