请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C123GH6PM 主题中讨论的其他器件:INA226、 BOOSTXL-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);
}
}