工具与软件:
您好!
我 需要 更改板载 I2C 连接。
GPIO 27为 SCL 、GPIO26为 SDA。 (我使用此文件进行测试、因为这是项目中的默认 I2C 配置。 电路板默认连接为 GPIO8、GPIO10。 需要稍后将代码更改为此内容)
我 希望每当我写入传输寄存器时 SCL 引脚切换。 未在 SCL 引脚上获取任何时钟。 请仔细检查以下配置并提出错误。
GPIO_setPinConfig (DEVICE_GPIO_CFG_SDAA);
GPIO_setDirectionMode (26、GPIO_DIR_MODE_IN);
GPIO_setPadConfig (DEVICE_GPIO_PIN_SDAA、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (DEVICE_GPIO_PIN_SDAA、GPIO_QUAL_ASYNC);
GPIO_setPinConfig (DEVICE_GPIO_CFG_SCLA);
GPIO_setDirectionMode (27、GPIO_DIR_MODE_IN);
GPIO_setPadConfig (DEVICE_GPIO_PIN_SCLA、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (DEVICE_GPIO_PIN_SCLA、GPIO_QUAL_ASYNC);
void HAL_setupI2CA (HAL_Handle halHandle)
{
HAL_Obj * obj =(HAL_Obj *) halHandle;
//在配置 I2C 之前必须将其复位
I2C_disableModule (obj->i2cHandle);
// I2C 配置。 使用占空比为50%的400kHz I2CCLK。
I2C_initMaster (obj->i2cHandle、device_SYSCLK_FREQ、400000、I2C_DUTYCYCLE_50);
I2C_setConfig (obj->i2cHandle、I2C_MASTER_SEND_MODE);
I2C_setSlaveAddress (obj->i2cHandle、I2C_slave_address);
I2C_disableLoopback (obj->i2cHandle);
I2C_setBitCount (obj->i2cHandle、I2C_BITCOUNT_8);
// 27FEB I2C_setDataCount (obj->i2cHandle、2);
I2C_setDataCount (obj->i2cHandle、1);
I2C_setAddressMode (obj->i2cHandle、I2C_ADDR_mode_7BITS);
//启用停止条件和寄存器访问就绪中断
I2C_enableInterrupt (obj->i2cHandle、I2C_INT_ADDR_slave | I2C_INT_ARB_LOST | I2C_INT_NO_ACK | I2C_INT_STOP_Condition);
// FIFO 配置
I2C_enableFIFO (obj->i2cHandle);
I2C_setFIFOInterruptLevel (obj->i2cHandle、I2C_FIFO_TXEMPTY、I2C_FIFO_RX2);
// I2C_clearInterruptStatus (obj->i2cHandle、I2C_INT_RXFF | I2C_INT_TXFF);
I2C_clearInterruptStatus (obj->i2cHandle、I2C_INT_ARB_LOST | I2C_INT_NO_ACK);
//配置完成。 启用模块。
I2C_setEmulationMode (obj->i2cHandle、I2C_emulation_free_run);
I2C_enableModule (obj->i2cHandle);
返回;
}//结束 HAL_setupI2CA()函数
在5毫秒循环中、将0x55写入 TX 寄存器
HWREGH (I2CA_BASE + I2C_O_DXR)= 0x55;
谢谢!
Anil