H
ARMony:1.09设备:PIC32MZ2048EFH064Harmony I2C配置:使用所有默认设置,参见附件。MPLAB:3.45MyI2C接口非常简单。一个PIC32主控器,连接到一个I2C从机。我一直很难让我的I2C功能。我一直在清除代码,直到我能够得到一些我可以观察到的SCL和SDA位。我剥离的回码是从主机到从属设备的3字节的简单传输。然后,我计算发送的比特数,期望看到24个SCL转换以及3个字节的数据,并能够重建我发送的内容。这是一个轮询实现,我认为它是基本的/简单的,因此它应该运行。命令是:DVRII2C*OPEN()DRVIII2CX传输():我得到的是9 SCL跃迁@ SCL 50 kHz速率,见附件。我期待24个SCL过渡+一些额外的。在数据中,我观察到8个LO位和1个HI位。这与我所期望的不匹配,因此我陷入了困境,需要帮助来解决这个问题。我注意到的另一件事情是,DRV_I2C_BUFFER_EVENT_COMPLETE从来没有发生过,因为我的if语句只有在添加了DRV_I2C_BUFFER_EVENT_ERRO的测试条件之后才会为真。R. So告诉我,对于我所有的传输,我都在一个无休止的循环中,我得到了一个EVE
tiON错误。但我不知道为什么或怎么可能。我的循环在每次I2C传输之间有0.5秒的暂停时间,所以,我没有重写一些缓冲区,也没有强调接口,它有足够的时间发送缓冲区。这是我第一次使用I2C接口来工作,因此我努力使代码同时工作,试图把我的观察结果解释回我所期望的,并且到目前为止我的观察结果与我的期望不符。这个打开了portAPP_RESULT LI2C_I2C_I2C_I2C_MasterInit(无效){/*打开I2C端口,如果没有之前的句柄*/如果(li2cData.drvI2CHandle_2CHandle_Master==DRV_HANDLE_HANDLE_INVALIVALIID ==DRV_2cData.drvI2C2C_I2C_I2C_I2C_I2C_I2C_I2C_I2C_I2C_I2C_I2C_I2C_I2C_I2C_I2C_I I2C_I2C_I2C_I I2C_I I2C_I2C_I2C_I d自己的:APP_RESULT LI2C_I2C_I2C_2C_I2C_Master读数据(APP_UINT16device地址,//APP_UINT16设备地址,//I2C设备地址22222222C设备地址.//I2C装置地址APP_UINT16设备地址APP_UINT_UINT16字节sToToW写入:APP_APP_APP_UINT_UI_UINT8*rxxdataPNT8*rXXXXXXXXPtr,//Byte字节字节字节字节字节字节为写入写入的Byte写(APP_APP_UI_UIUI_UIUIUIUIUIUINT8._UIUINT8*UIUIUIUIUINT8.*APP_UINT16字节To读取)//字节读取{uint8_tTX缓冲器_1.[].{uint8_tTX缓冲器_1[]]=“\\\\x45""1M";1M;\\\\\\x4545454545xx454545451M""1M""1M字节读取读取3;字节读取读取li2cData.drvI2CTxRxBufferHandle)==DRV(LI2C_BUFFER_2C_BUFFER_EVENT_COMPLET_COMPLETE)|_|LI2C_Check_转移_转移状态状态(li2cData.drvI2CHandle_Mas,li2cData.drvI2CHandle2CHandle_Mas_Mas_Master_Master_Master_Master_Mas_Master_Masandle_Masd2cData.d2cData.d2cData.drvI2cData.drvI2c数据数据数据drvI2222CCCdrvI2CCCCCCCCCDrvI25252525252525252525252525252525252525252525252525CCCCCCC16_t)deviceAddress,[0],numOfBytes,[NULL];.(APP_OK);}.(APP_ERROR_I2C_FAIL);}