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.

[参考译文] TM4C123GH6PM:使用 I2C sensorlib 驱动器时无输出

Guru**** 2267350 points
Other Parts Discussed in Thread: INA226
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/661955/tm4c123gh6pm-no-output-when-using-i2c-sensorlib-drivers

器件型号:TM4C123GH6PM
主题中讨论的其他器件:INA226BOOSTXL-SENSORS

大家好、

我希望有人能在这里提供一些帮助。

在使用 driverlib 命令成功写入和读取 I2C 器件后、我决定尝试使用传感器库驱动程序(看起来更好)、并复制 SPMU371D 第79和80页中的示例。 此外、我在"startup_css.c"中添加了中断处理程序、并初始化 I2C 端口1。

需要注意的是、在运行该代码时、I2C 信号根本没有任何活动。 调试代码时、微控制器保持在"while (!g_bI2CMSSimpleDone)"行中。 在下面的示例中、请不要考虑从器件地址、至少我想在 I2C 端口中看到一些活动! 这里需要什么?

任何帮助都已通知、
Justo

#include 
#include 
#include "inc/hw_types.h"
#include "lib/hw_memmap.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/i2c.h"
#include "driverlib/rom.h"
#include "driverlib/pin_map.h"

#include

"driveriptintrinc/包含"hw_status.h"#define #mdio.htm#include "#define #include "#mdio.h"







tI2CMInstance g_sI2CMSSimpleInst;


//完成 I2C 事务时设置的布尔值。
volatile bool g_bI2CMSSimpleDone = true;


//
// I2C 模块的中断处理程序。
//
void I2CMSSimpleIntHandler (void)
{
I2CMIntHandler (&g_sI2CMSSimpleInst);
}

//
//在 I2C 事务完成后回调。
//
void I2CMSSimpleCallback (void *pvData、uint_fast8_t ui8Status)
{
//查看是否发生错误。
if (ui8Status!= I2CM_STATUS_SUCCESS)
{
//发生了错误,所以如果需要,请在此处处理。
UARTprintf ("Error\n");
}

//指示 I2C 事务已完成。
G_bI2CMSimpleDone = true;
UARTprintf ("无错误\n");
}


// I2C 主驱动程序示例。
void
I2CMSSimpleExamples(void){

uint8_t pui8Data[4];
//
//初始化 I2C 主驱动程序。 假设 I2C 模块具有
//已启用并且 I2C 引脚已配置。
//
I2CMInit (&g_sI2CMSSimpleInst、I2C1_base、INT_I2C1、0xff、0xff、 8000000);

//
//将两个字节的数据写入地址0x22的 I2C 器件。
//
G_bI2CMSimpleDone = false;
I2CMWrite (&g_sI2CMSimpleInst、0x22、pui8Data、2、I2CMSimpleCallback、 0);
while (!g_bI2CMSSimpleDone)
{
}

//
//从地址0x31处的 I2C 器件读取四个字节的数据。
//
G_bI2CMSimpleDone = false;
I2CMRead (&g_sI2CMSSimpleInst、0x31、pui8Data、1、pui8Data、 4、
I2CMSSimpleCallback、0);
while (!g_bI2CMSSimpleDone)
{
}

}


//
串行端口配置
//
void ConfigureUART (void)
{
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
ROM_GPIOPinConfigure (GPIO_PA0_U0RX);
ROM_GPIOPinConfigure (GPIO_PA1_U0TX);
ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC);
UARTStdioConfig (0、115200、16000000);
}


//
主
//
int main (void)
{

ConfigureUART ();//初始化串行端口

SysClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |SysCtlSYSCTL_XCLKUST_GPIOST_CLK

);//配置 GPIOPTL_PICTL_PIOSC_PIOSC_6
(GPIORT_CL_PIOSC_CA_PIN_CL_SIMPLE_PIOSC_CAUST_CLK);/ SYSCIP_PIOSC_PIOSC_PIOSC_PIN_CAST_CAST_PIN_PEL
(GPIORT_PIOSC_PIOSC_CAST_CAST_PIN_PI_CAST_I)

GPIO_PIN_7);
GPIOPinConfigure (GPIO_PA6_I2C1SCL);
GPIOPinConfigure (GPIO_PA7_I2C1SDA);

//启用并初始化 I2C1主模块。 false:100kbps;true:400kbps。
I2CMasterInitExpClk (I2C1_base、SysCtlClockGet ()、false);

//发送一些内容!
I2CMSSimpleExampl();

while (1)
{
SysCtlDelay (20000000);
}

}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Justolap、您好!

    我不确定 sensorlib 是否确实是更适合您工作的基础。 这实际上取决于您的应用。 如果您使用任何直接受支持的传感器、或者使用与受支持的传感器版本非常相似的传感器、则 Sensorlib 非常适合、因为这种传感器本身的很多处理都是为您完成的。

    如果您正在使用其他一些 I2C 器件并需要从头开始构建代码、则最好继续使用 driverlib 并进一步构建。 当然、如果您希望使用 sensorlib 作为设计应用程序的背景、它可能是一个很好的参考、但我不确定移植 sensorlib 项目、然后尝试根据您的需要修改它。

    那么、说到这里、您要尝试连接到 TM4C 的器件是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ralph、

    感谢您的快速回复。

    我明白你的观点。 在这种情况下、I2C 用于电流传感器(INA226)、ADI 的 DAC、温度传感器(TI 也提供)等显示组件... 我认为就这些。 然后、我将继续使用我的工作代码!

    另一方面、我发现 driverlib 库的原因是我尝试将其用于名为 BOOSTXL-SENSORS 的新传感器升压板。 TivaWare_C_Series-2.1.4.178"中的 driverlib 示例适用于较旧的电路板.... 不适合我住的酒店

    再次感谢您的回答、它帮助我组织所有选项。

    此致、
    Justo