#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "driverlib/rom.h"
#include "driverlib/i2c.h"
char data;
void main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);//50MHz
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0);
GPIOPinConfigure(GPIO_PB2_I2C0SCL);
GPIOPinConfigure(GPIO_PB3_I2C0SDA);
GPIOPinTypeI2CSCL(GPIO_PORTB_BASE, GPIO_PIN_2);
GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_3);
I2CMasterEnable(I2C0_BASE);
I2CMasterInitExpClk(I2C0_BASE,SysCtlClockGet(),false);
I2CMasterSlaveAddrSet(I2C0_BASE,0XAE,true);
while(1)
{
I2CMasterControl(I2C0_BASE,I2C_MASTER_CMD_SINGLE_RECEIVE);
while(I2CMasterBusy(I2C0_BASE));
if(I2CMasterErr(I2C0_BASE)==I2C_MASTER_ERR_NONE)
data=I2CMasterDataGet(I2C0_BASE);
}
}
调试是发现程序总是卡在while(I2CMasterBusy(I2C0_BASE));求指点
user151383853:
软件上验证一下 I2c 寄存器设置.
硬件上也要验证一下 i2c 两条线的;连接和状态, 比如 SCL 线常低了, 短路了
Michael Sun:
代码不全呀,中断服务程序没写吗?
xyz549040622:
你抓波形看看,是不是硬件问题