#include "i2c_analog.h" #include "ti_msp_dl_config.h" #define SCL_L() DL_GPIO_clearPins(TMAG5273_PORT, TMAG5273_SCL_PIN) #define SCL_H() DL_GPIO_setPins(TMAG5273_PORT, TMAG5273_SCL_PIN) #define SDA_L() DL_GPIO_clearPins(TMAG5273_PORT, TMAG5273_SDA_PIN) #define SDA_H() DL_GPIO_setPins(TMAG5273_PORT, TMAG5273_SDA_PIN) #define SDAM() DL_GPIO_readPins(TMAG5273_PORT, TMAG5273_SDA_PIN) #define SET_SCL_OUT() {DL_GPIO_initDigitalOutput(TMAG5273_SCL_IOMUX);DL_GPIO_enableOutput(TMAG5273_PORT, TMAG5273_SCL_PIN);} #define SET_SDA_OUT() {DL_GPIO_initDigitalOutput(TMAG5273_SDA_IOMUX);DL_GPIO_enableOutput(TMAG5273_PORT, TMAG5273_SDA_PIN);} #define SET_SDA_IN() DL_GPIO_initDigitalInput(TMAG5273_SDA_IOMUX) void I2C_Delay(void) { delay_cycles(10); //20 SCL周期1us } void I2C_Init(void) { SET_SCL_OUT(); SET_SDA_OUT(); } void I2C_Start(void) { SDA_H(); SCL_H(); I2C_Delay(); SDA_L(); I2C_Delay(); SCL_L(); } void I2C_Stop(void) { SCL_L(); SDA_L(); I2C_Delay(); SCL_H(); SDA_H(); I2C_Delay(); } void I2C_SendACK(UBYTE ack) { if(ack == 0) { SDA_L(); } else { SDA_H(); } SCL_H(); I2C_Delay(); SCL_L(); I2C_Delay(); } void I2C_SendByte(UBYTE sendDAT) { UBYTE i,revack; for (i= 0 ; i< 8; i++) { SCL_L(); I2C_Delay(); if (sendDAT & 0x80) // write data { SDA_H(); } else { SDA_L(); } sendDAT <<= 1; SCL_H(); I2C_Delay(); } SCL_L(); I2C_Delay(); SET_SDA_IN(); SCL_H(); delay_cycles(2); revack = (UBYTE)SDAM(); I2C_Delay(); SCL_L(); SET_SDA_OUT(); } UBYTE I2C_RecvByte(void) { UBYTE i; UBYTE revDAT = 0; SDA_H(); SET_SDA_IN(); for (i=0; i<8; i++) { revDAT <<= 1; SCL_H(); if (SDAM()) { revDAT |= 0x01; } else { revDAT &= 0xfe; } I2C_Delay(); SCL_L(); I2C_Delay(); } SET_SDA_OUT(); return revDAT; }