#include "stdint.h" #include "stdbool.h" #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "inc/hw_i2c.h" #include "inc/hw_ints.h" #include "driverlib/interrupt.h" #include "driverlib/i2c.h" #include "driverlib/sysctl.h" #include "driverlib/gpio.h" #include "driverlib/rom.h" #include "driverlib/rom_map.h" #include "driverlib/pin_map.h" #define SLAVE_ADDRESS 0x4F//7位地址:1001111 void Init_I2C_Comm() { // 使能I2C1外设 SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C1); // 使能PortA外设端口 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); // 配置PA6、PA7为上拉端口 GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_6 | GPIO_PIN_7, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); // PA6配置为I2C协议时钟信号、 PA7配置为I2C协议数据信号 GPIOPinConfigure(GPIO_PA6_I2C1SCL); GPIOPinConfigure(GPIO_PA7_I2C1SDA); GPIOPinTypeI2C(GPIO_PORTA_BASE, GPIO_PIN_6 | GPIO_PIN_7); GPIOPinTypeI2CSCL(GPIO_PORTA_BASE, GPIO_PIN_6); // 初始化I2C主机模块。设置总线速度和使能主机模块 I2CMasterInitExpClk(I2C1_BASE, SysCtlClockGet(), false); // 使能I2C主机模块 I2CMasterEnable(I2C1_BASE); } uint32_t I2C_TMP_MSB ; // 保存通过I2C读取温度的8位高字节 uint32_t I2C_TMP_LSB; // 保存通过I2C读取温度的8位低字节 int main(void) { SysCtlClockSet( SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3); Init_I2C_Comm(); while (1) { I2CMasterSlaveAddrSet(I2C1_BASE, SLAVE_ADDRESS, false); //true:主机初始化读;false:主机初始化写。 I2CMasterDataPut(I2C1_BASE, 0x00); //(主机基址,发送数据缓存)写pointer register I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_SINGLE_SEND);//(主机地址,设置所处状态) while (I2CMasterBusBusy(I2C1_BASE)) ; //(if I2C busy return true;if I2C idle return false) I2CMasterSlaveAddrSet(I2C1_BASE, SLAVE_ADDRESS, true); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 4); I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START); while (I2CMasterBusy(I2C1_BASE)) ; I2C_TMP_MSB = I2CMasterDataGet(I2C1_BASE); I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH); while (I2CMasterBusy(I2C1_BASE)) ; I2C_TMP_LSB = I2CMasterDataGet(I2C1_BASE); } }