我正在尝试在 tm4c123gh下午6时通过 I2C 使用 SMBus。 我使用在 utils 用户指南中给出的示例代码。 但是、每次我调用任何函数从从 i2c 总线挂起进行读取或写入时。 是否有任何人可以从 SMBus 从设备读取或写入任何示例代码。 请帮帮我。
谢谢、此致、
Aman。
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.
我正在尝试在 tm4c123gh下午6时通过 I2C 使用 SMBus。 我使用在 utils 用户指南中给出的示例代码。 但是、每次我调用任何函数从从 i2c 总线挂起进行读取或写入时。 是否有任何人可以从 SMBus 从设备读取或写入任何示例代码。 请帮帮我。
谢谢、此致、
Aman。
尊敬的克罗斯比先生:
感谢您的回复。 这是我用于初始化和读取的代码。
void SMBusInitonI2C (void){
//
//为 SMBus 主设备启用外设。
//
SysCtlPeripheralEnable (SYSCTL_Periph_I2C0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
//
//为 I2C0配置所需的引脚。
//
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOB))
{
}
GPIOPinConfigure (GPIO_PB2_I2C0SCL);
GPIOPinConfigure (GPIO_PB3_I2C0SDA);
GPIOPinTypeI2CSCL (GPIO_PORTB_BASE、GPIO_PIN_2);
GPIOPinTypeI2C (GPIO_PORTB_BASE、GPIO_PIN_3);
//
//配置 IO 多路复用器,使 I2C0的 I2C 引脚位于 PB2/3上。
//
//
//初始化主 SMBus 端口。
//
SMBusMasterInit (&g_sMaster、I2C0_BASE、SysCtlClockGet ());
I2CIntRegister (GPIO_PORTB_BASE、SMBusMasterIntHandler);
//启用主中断。
//
SMBusMasterIntEnable (&g_sMaster);
I2CMasterEnable (I2C0_BASE);
IntMasterEnable();
}
U8_t readFromSlave (U8_t device_address、U8_t device_register){
int i;
SMBusPECEnable (&g_sMaster);
返回状态= SMBusMasterByteWordRead (&g_sMaster、device_address、device_register、g_pucSlaveRxBuffer、2);
UARTprintf ("状态:%d \r\n"、返回状态);
对于(i=0;i<2;i++){
UARTprintf ("%d \r\n"、g_pucSlaveRxBuffer[i]);
}
返回0;
}
当我调用 readFromSlave (slave_addr、RegVal)时、它打印0、UC 停止所有操作。
此致、
Aman。
此示例可能会有所帮助。
/cfs-file/__key/communityserver-discussions-components-files/908/SMBus.zip
//简单 SMBus 示例。 此示例使用两个 EK-TM4C123GXL LaunchPad。 I2C0 //和引脚 PB2和 PB3都用于这两个 LaunchPad。 这些引脚必须连接 在两个 LaunchPad 之间//并且必须具有公共接地。 //两个引脚(SDA 和 SCL)必须有外部上拉电阻器。 // //主控方发出 ByteWord 读取命令请求单个字节。 //从器件用一个字节进行响应,该字节随着每个请求的增加而增加。
这是前3个 I2C 总线事务的逻辑分析仪快照。