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

📄 i2c.bak

📁 ADI公司的关于光通讯模块的监控程序,在KEIL FOR ARM 的编译环境编译.程序大小约12K,芯片是ADu7020.
💻 BAK
字号:
// i2c.c

/********************************************************************/
/*                                                                  */
/*      I2C Interrupt                                               */
/*                                                                  */
/********************************************************************/
#include <ADuC7020.h>
#include "common.h"

void InitI2c(void){
    i2c_stop = FALSE;         // Initialize I2C flags
    i2c_first = TRUE;
    i2c_receive = 0x00;
    I2CSTX = A0h[0];		  // for first I2C operation assuming we will get the address A0
}


/*
void i2c(void){

    static BYTE i2c_addr=0, byte_addr=0, byte_data=0;
	int status = I2CSSTA;
  
    if((status & 0x08) == 0x08){                       // slave-receiver INT?
   		GP4DAT ^= 0x00040000;

        /////////STATE2/////////////
        if(i2c_first == TRUE){                         // first slave-receiver INT
            if(I2C0SIDD==0) i2c_addr = 0xA0;           // get i2c device address
            else i2c_addr = 0xA2; 
            byte_addr = I2CSRX;                        // get byte address
            I2C0SSTA |= 0x80;                          // flush TX FIFO  
            if(i2c_addr==0xA0)I2CSTX = A0h[byte_addr]; // set tx data for next read access
            if(i2c_addr==0xA2)I2CSTX = A2h[byte_addr];
            i2c_first = FALSE;                         // clear i2c_first flag
        }
        /////////STATE3/////////////
        else{                                           // slave-receiver INT  
             byte_data = I2CSRX;                        // get byte data
             i2c_write(i2c_addr, byte_addr, byte_data);	// save received byte data
             I2C0SSTA |= 0x80;                          // flush TX FIFO  
             byte_addr++;                               // inclement byte address
             if(i2c_addr==0xA0)I2CSTX = A0h[byte_addr];// set tx data for next read access
             if(i2c_addr==0xA2)I2CSTX = A2h[byte_addr];
        }
    }
         /////////STATE4/////////////
    if((status & 0x04) == 0x04){                        // slave-transmitter INT?
  		GP4DAT ^= 0x00040000;

        if(I2C0SIDD==0)i2c_addr = 0xA0;                  // get i2c device address						 
        else i2c_addr = 0xA2;
     
	    if(i2c_addr==0xA0){
			I2CSTX = A0h[byte_addr];  				    // set tx data (current address)
        	byte_addr++;                                // increment byte address
			I2CSTX = A0h[byte_addr];                    // set tx data (next address)
		}
	    if(i2c_addr==0xA2){
			I2CSTX = A2h[byte_addr];                    // set tx data (current address)  
        	byte_addr++;                                // increment byte address
			I2CSTX = A2h[byte_addr]; 				    // set tx data for next read access
		}
    }

    return;
}
*/

/********************************************************************/
/*                                                                  */
/*      I2C-write / Slave-receiver                                  */
/*                                                                  */
/********************************************************************/
void i2c_write(BYTE i2c_addr, BYTE byte_addr, BYTE byte_data){
    
    if(i2c_addr==0xA0) A0h[byte_addr] = byte_data;
    if(i2c_addr==0xA2) A2h[byte_addr] = byte_data;
    
    i2c_receive = i2c_addr;         // set i2c device address for FlashUpdate function

    // update DACs
    if((i2c_addr==0xA2)&&((byte_addr==248)||(byte_addr==249))) SetDac(0);
    if((i2c_addr==0xA2)&&((byte_addr==250)||(byte_addr==251))) SetDac(1);
    
    // run Force-Flash-Update
    //if(FORCE_FLASH_UPDATE) FlashUpdate();

    // run checksum
    if((i2c_addr==0xA0)&&(byte_addr<63)) Checksum(1);
    if((i2c_addr==0xA0)&&(63<byte_addr)&&(byte_addr<95)) Checksum(2);
    if((i2c_addr==0xA2)&&(byte_addr<95)) Checksum(3);	

return;
}

⌨️ 快捷键说明

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