#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);
}
}