This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
I2CMasterSlaveAddrSet( I2C1_BASE, 0x50, 0); I2CMasterDataPut( I2C1_BASE, 0x01 ); //写入主机数据(寄存器地址) while( I2CMasterErr(I2C1_BASE) | I2CMasterBusy(I2C1_BASE) ); I2CMasterControl( I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START ); //主机数据开始传输 while( I2CMasterErr(I2C1_BASE) | I2CMasterBusy(I2C1_BASE) ); I2CMasterDataPut( I2C1_BASE, 0x06 ); //写入主机数据(寄存器内容)SysCtlDelay( 5 ); while( I2CMasterErr(I2C1_BASE) | I2CMasterBusy(I2C1_BASE) ); I2CMasterControl( I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH ); //主机数据+stop传输 while( I2CMasterErr(I2C1_BASE) | I2CMasterBusy(I2C1_BASE) );
为什么程序一直停在while呢?
Myi2cMaster_Init( I2C_BASE, GPIO_PORTG_BASE, 100000 );
void Myi2cMaster_Init(uint32_t ui32Base, uint32_t PortBase, uint32_t ui32SCLFreq) { ASSERT(_I2CBaseValid(ui32Base)); uint32_t SCLGPIO_Pin, SDAGPIO_Pin, SCLPinConfig, SDAPinConfig; switch( ui32Base ) { case I2C0_BASE: SCLPinConfig = GPIO_PB2_I2C0SCL; SDAPinConfig = GPIO_PB3_I2C0SDA; SCLGPIO_Pin = GPIO_PIN_2; SDAGPIO_Pin = GPIO_PIN_3; SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); break; case I2C1_BASE: SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C1); if( PortBase == GPIO_PORTG_BASE ) { SCLPinConfig = GPIO_PG0_I2C1SCL; SDAPinConfig = GPIO_PG1_I2C1SDA; SCLGPIO_Pin = GPIO_PIN_0; SDAGPIO_Pin = GPIO_PIN_1; SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG); } else { SCLPinConfig = GPIO_PR0_I2C1SCL; SDAPinConfig = GPIO_PR1_I2C1SDA; SCLGPIO_Pin = GPIO_PIN_0; SDAGPIO_Pin = GPIO_PIN_1; SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOR); } break; case I2C2_BASE: SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C2); SCLPinConfig = GPIO_PG2_I2C2SCL; SDAPinConfig = GPIO_PG3_I2C2SDA; SCLGPIO_Pin = GPIO_PIN_2; SDAGPIO_Pin = GPIO_PIN_3; SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG); break; case I2C3_BASE: SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C3); if( PortBase == GPIO_PORTG_BASE ) { SCLPinConfig = GPIO_PG4_I2C3SCL; SDAPinConfig = GPIO_PG5_I2C3SDA; SCLGPIO_Pin = GPIO_PIN_4; SDAGPIO_Pin = GPIO_PIN_5; SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG); } else { SCLPinConfig = GPIO_PR4_I2C3SCL; SDAPinConfig = GPIO_PR5_I2C3SDA; SCLGPIO_Pin = GPIO_PIN_4; SDAGPIO_Pin = GPIO_PIN_5; SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOR); } break; case I2C4_BASE: SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C4); SCLPinConfig = GPIO_PG6_I2C4SCL; SDAPinConfig = GPIO_PG7_I2C4SDA; SCLGPIO_Pin = GPIO_PIN_6; SDAGPIO_Pin = GPIO_PIN_7; SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG); break; case I2C5_BASE: SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C5); SCLPinConfig = GPIO_PB0_I2C5SCL; SDAPinConfig = GPIO_PB1_I2C5SDA; SCLGPIO_Pin = GPIO_PIN_0; SDAGPIO_Pin = GPIO_PIN_1; SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); break; } GPIOPinConfigure( SCLPinConfig ); GPIOPinConfigure( SDAPinConfig ); GPIOPinTypeI2CSCL( PortBase, SCLGPIO_Pin ); GPIOPinTypeI2C( PortBase, SDAGPIO_Pin ); I2CMasterPrivateInit( ui32Base, ui32SysClock, ui32SCLFreq); I2CMasterEnable( ui32Base ); } 这是初始化配置
Myi2cMaster_Init( I2C_BASE, GPIO_PORTG_BASE, 100000 );中的I2C_BASE和你用的I2C1_BASE一致不,可以debug看一下是否进行了对应的I2C设置