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.

[参考译文] CCS/TM4C1294NCPDT:tm4c1294ncpdt Tiva 板上的 master_receive_interrupte i2c

Guru**** 2595805 points
Other Parts Discussed in Thread: EK-TM4C1294XL

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/963923/ccs-tm4c1294ncpdt-master_receive_interrupte-i2c-on-tm4c1294ncpdt-tiva-board

器件型号:TM4C1294NCPDT
Thread 中讨论的其他器件:EK-TM4C1294XL

工具/软件:Code Composer Studio

我尝试获取2个字节并在每2个字节后生成中断、并将其存储在缓冲区中、我如何执行此操作。

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

    您好!

     您的 I2C 是主设备还是从设备?

     如果您的 I2C 是主设备、请检查下面的帖子并查看它是否有用。  

    https://e2e.ti.com/support/microcontrollers/other/f/908/t/592966?TM4C123GH6PM-I2C-Interrupt-quesiton

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

    我的器件(主器件)是 Tiva 板、从器件是压力传感器、我希望每2个字节获取数据并存储在缓冲器中

    我随附了传感器数据表,我只需要压力字节 。

    当两个字节完成后、重新启动  

    生成 中断并再次开始 、继续将数据存储在缓冲区中

    www.analogue-micro.com/.../ams5812-datasheet.pdf

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

    您好!

     您是否尝试将 TX 和 RX FIFO 配置为主器件、并将 FIFO 触发级别配置为2个字节。 如果您只需要 RX 中断、则可以移除 I2C_FIFO_CFG_TX_MASTER 和 I2C_FIFO_CFG_TX_TRIG_2。

      I2CTxFIFOConfigSet (I2C0_BASE、 I2C_FIFO_CFG_TX_MASTER | I2C_FIFO_CFG_RX_MASTER | I2C_FIFO_CFG_TX_TRIG_2、I2C_FIFO_CFG_RX_TRIG_2);  

     启用 FIFO 中断。  

    I2CMasterIntEnableEx (I2C0_BASE、 I2C_MASTER_INT_RX_FIFO_REQ); // 如果您还想启用其他中断源、例如检测从器件或主器  件发送停止位的 NACK、则需要使用 I2C_MASTER_INT_STOP | I2C_MASTER_INT_NACK。

    I2CMasterEnable (I2C0_BASE);

      

      

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

    如果可能、我会在这个中添加一个新的示例代码、请分享该类型的任何示例代码  

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

     我写入此类型的代码、无法获取数据  

    我无法找到 缺少哪条线  


    #include
    #include
    #include
    #include "inc/hw_ints.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_NVIC.h"
    #include "inc/hw_types.h"
    #include "inc/hw_sysctl.h"
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    #include "driverlib/flash.h"
    #include "driverlib/SysTick .h"
    #include "driverlib/debug.h"
    #include "driverlib/fpu.h"
    #include "driverlib/gpio.h"
    #include "driverlib/i2c.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/rom.h"
    #include "driverlib/rom_map.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/timer.h"
    #include "driverlib/uart.h"
    #include "driverlib/udma.h"
    #include "driverlib/adc.h"
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    #include "grlib/grlib.h"
    #include "grlib/widget.h"
    #include "grlib/canvas.h"

    #include "Kentec320x240x16_ssd2119_SPI.h"
    //#include "drivers/Kentec320x240x16_ssd2119_spi.c"

    #include "utils/uartstdio.h"


    define I2C_NUM_DATA 500

    /*为 I2C 状态机定义*/

    #define I2C_MASTER_IDLE 0x0
    #define I2C_MASTER_TX 0x1
    #define I2C_MASTER_RX 0x2
    #define I2C_MASTER_Anak 0x3
    #define I2C_MASTER_DNAK 0x4
    #define I2C_MASTER_ALST 0x5
    #define I2C_MASTER_UNKN 0x6


    void ConfigureGPIO (void);
    void ConfigureI2C7 (void);
    void I2C3_IRQHandler (void);

    tContext sContext;
    tRectangle sRect;

    //
    //定义 AMS5812 I2C 地址。
    //
    //
    #define SLAVE_ADDRESS 0x78

    //
    //
    //计数已调用的中断数的计数器。
    //
    //
    静态易失性 uint32_t g_ui32Counter = 0;

    //
    //
    //系统时钟速率,单位为 Hz。
    //
    //
    uint32_t g_ui32SysClock;

    //
    //
    //包含显示的中断指示符当前值的标志
    //在 UART 上。
    //
    //
    volatile uint_fast8_t g_ui32Flags;
    volatile uint_fast8_t i2c_flag;


    //
    //
    //驱动程序库遇到错误时调用的错误例程。
    //
    //
    #ifdef 调试
    无效
    _error__(char * pcFilename、uint32_t ui32Line)


    #endif

    /* I2C 数据和状态机的变量*/


    //uint8_t sendData[I2C_NUM_DATA]={0x04、0xA5、0x36、0x67、0x44};
    uint8_t getData[I2C_NUM_DATA]={0};
    uint8_t setI2CState;
    uint8_t dataIndex;

    空 I2C3_IRQHandler (空)

    uint32_t getIntStatus;
    uint32_t getERRStatus;

    //获取中断状态并清除相同状态

    getIntStatus = MAP_I2CMasterIntStatusEx (I2C4_base、true);
    MAP_I2CMasterIntClearEx (I2C7 _BASE、getIntStatus);

    //检查我们是否有数据请求

    if ((setI2CState = I2C_MASTER_RX)&&(dataIndex < I2C_NUM_DATA-2))

    Getdata[dataIndex++]= map_I2CMasterDataGet (I2C4_base);
    MAP_I2CMasterControl (I2C7基础版、I2C_MASTER_CMD_BURST_Receive_contt);

    否则、如果((setI2CState =I2C_MASTER_RX)&&(dataIndex =I2C_NUM_DATA-2))

    Getdata[dataIndex++]= map_I2CMasterDataGet (I2C4_base);
    MAP_I2CMasterControl (I2C7基础版、I2C_MASTER_CMD_BURST_Receive_finish);

    //检查总线上是否有停止条件

    if ((getIntStatus & I2C_MASTER_INT_STOP)=I2C_MASTER_INT_STOP)

    if (setI2CState = I2C_MASTER_TX)

    setI2CState = I2C_MASTER_IDLE;

    否则、如果(setI2CState = I2C_MASTER_RX)

    Getdata[dataIndex]= map_I2CMasterDataGet (I2C4_base);
    setI2CState = I2C_MASTER_IDLE;

    //检查 I2C 总线上是否存在 ADDR NAK、数据 NAK 或 ARB 丢失情况

    if ((getIntStatus & I2C_MASTER_INT_NACK)== I2C_MASTER_INT_NACK)

    //设置错误 LED
    // map_GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、GPIO_PIN_0);

    getERRStatus = MAP_I2CMasterErr (I2C4_base);
    if ((getERRStatus & I2C_MASTER_ERR_ADDR_ACK)=I2C_MASTER_ERR_ADDR_ACK)

    setI2CState = I2C_MASTER_Anak;

    if ((getERRStatus & I2C_MASTER_ERR_DATA_ACK)=I2C_MASTER_ERR_DATA_ACK)

    setI2CState = I2C_MASTER_DNAK;

    if ((getERRStatus & I2C_MASTER_ERR_ARB_Lost)=I2C_MASTER_ERR_ARB_Lost)

    setI2CState = I2C_MASTER_ALST;



    //
    //
    //配置 UART 及其引脚。 这必须在 UARTprintf()之前调用。
    //
    //
    空配置 UART (空)

    //
    //启用 UART 使用的 GPIO 外设。
    //
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

    //
    //启用 UART0。
    //
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);

    //
    //为 UART 模式配置 GPIO 引脚。
    //
    MAP_GPIOPinConfigure (GPIO_PA0_U0RX);
    MAP_GPIOPinConfigure (GPIO_PA1_U0TX);
    MAP_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);

    //
    //初始化控制台 I/O 的 UART
    //
    UARTStdioConfig (0、115200、g_ui32SysClock);

    //
    //
    //此示例应用演示了如何使用计时器生成计时器
    //周期性中断。
    //
    //
    int main (空)

    //
    //从 PLL 以120MHz 运行。
    //注意:SYSCTL_CFG_VCO_240是 TivaWare 2.2.x 和中提供的新设置
    //之后更好地反映由于 SYSCTL_22而导致的实际 VCO 速度。
    //
    G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、120000000);

    ConfigureUART();
    ConfigureGPIO();
    配置 I2C7 ();
    I2C3_IRQHandler();

    G_ui32Counter = 0;

    //初始化显示驱动程序。

    // Kentec320x240x16_SSD2119Init (g_ui32SysClock);
    //GrContextInit (&sContext、&g_sKentec320x240x16_SSD2119);


    //启用处理器中断。
    MAP_IntMasterEnable();

    /*初始化 I2C 主设备的状态*/
    setI2CState = I2C_MASTER_IDLE;

    //在计时器运行时永久循环。
    //


    while (1)


    /*初始化 Rx 的变量*/

    setI2CState = I2C_MASTER_RX;

    dataIndex = 0;

    MAP_I2CMasterSlaveAddrSet (I2C1_base、SLAVE_ADDRESS、false);

    MAP_I2CMasterControl (I2C7基础版、I2C_MASTER_CMD_BURST_Receive_start);

    /*等待接收所有字节*/
    while (setI2CState = I2C_MASTER_RX)


    Getdata[dataIndex++];



    //
    //
    //配置 GPIO 端口 N
    //
    //


    空配置 GPIO (空)

    //
    //启用用于板载 LED 的 GPIO 端口。
    //
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);

    //
    //为 LED (PN0和 PN1)启用 GPIO 引脚。
    //
    MAP_GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0 |GPIO_PIN_1);
    MAP_GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_0 |GPIO_PIN_4);

    //
    //
    //配置 I2C 端口
    //
    //


    空配置 I2C7 (空)

    //
    //使用前必须启用 I2C7外设。
    //
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_I2C7);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);//

    //
    //等待 I2C0模块准备就绪。
    //
    while (!SysCtlPeripheralReady (SYSCTL_Periph_I2C7))


    //为端口 D0和 D1上的 I2C7功能配置引脚复用。
    //如果您的器件不支持引脚复用、则无需执行此步骤。
    //
    MAP_GPIOPinConfigure (GPIO_PD0_I2C7SCL);
    MAP_GPIOPinConfigure (GPIO_PD1_I2C7SDA);

    //
    //为这些引脚选择 I2C 功能。 此函数也会
    //为 I2C 操作配置 GPIO 引脚,将其设置为
    //开漏操作,弱上拉。 请参阅数据表
    //查看每个引脚分配了哪些功能。
    //
    MAP_GPIOPinTypeI2CSCL (GPIO_PORTD_BASE、GPIO_PIN_0);
    MAP_GPIOPinTypeI2C (GPIO_PORTD_BASE、GPIO_PIN_1);//


    //启用到处理器的中断。
    //
    MAP_IntMasterEnable();

    //
    //启用和初始化 I2C7主机模块。 使用的系统时钟
    // I2C7模块。 最后一个参数设置 I2C 数据传输速率。
    //如果为 false,则数据速率设置为100kbps,如果为 true,则数据速率将设置为
    //设置为400kbps。 在本示例中、我们将使用100kbps 的数据速率。
    //
    MAP_I2CMasterInitExpClk (I2C7基础版、g_ui32SysClock、false);

    //
    //为仲裁丢失、停止、NAK、时钟低电平启用中断
    //超时和数据
    //
    MAP_I2CMasterIntEnableEx (I2C4_base、I2C_MASTER_INT_NACK |I2C_MASTER_INT_STOP|I2C_MASTER_INT_DATA);

    /*初始化 I2C 主设备的状态*/

    setI2CState = I2C_MASTER_IDLE;
    MAP_IntEnable (I2C4_base);

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

    当运行此代码时、启动文件出现错误、我经常提到 int Hendler 文件、但我无法理解是什么错误。

    //
    //
    // startup_ccs.c -用于 TI Code Composer Studio 的启动代码。
    //
    //版权所有(c) 2013-2020 Texas Instruments Incorporated。 保留所有权利。
    //软件许可协议
    //
    //德州仪器(TI)仅提供和使用此软件
    //专门用于 TI 的微控制器产品。 该软件归其所有
    // TI 和/或其供应商、受适用版权保护
    //法律。 您不能将此软件与"病毒"开源软件结合使用
    //软件,以便形成一个更大的程序。
    //
    //此软件按“原样”提供,且存在所有故障。
    //不作任何明示、暗示或法定的保证,包括但
    //不限于对适销性和适用性的暗示保证
    //此软件的特定用途。 TI 不得以任何方式进行
    //情况,对特殊、偶然或从属事件负责
    //任何原因造成的损害。
    //
    //这是 EK-TM4C1294XL 固件包2.2.0.295版的一部分。
    //
    //

    #include
    #include "inc/hw_NVIC.h"
    #include "inc/hw_types.h"

    //
    //
    //转发默认故障处理程序的声明。
    //
    //
    void ResetISR (void);
    静态空 NmiSR (空);
    静态空 FaultISR (空);
    静态空 IntDefaultHandler (void);

    //
    //
    //在时要调用的复位处理程序的外部声明
    //处理器启动
    //
    //
    extern void _c_int00 (void);

    //
    //
    //标记栈顶的链接器变量。
    //
    //
    extern uint32_t __stack_top;

    //
    //
    //应用程序使用的中断处理程序的外部声明。
    //
    //
    extern void Timer0IntHandler (void);
    //extern void Timer1IntHandler (void);
    void I2C3_IRQHandler (void);

    //
    //
    //矢量表。 请注意、必须将适当的构造放置在到上
    //确保它在物理地址0x0000.0000或开始处结束
    //程序(如果位于0以外的起始地址)。
    //
    //
    #pragma DATA_SECTION (g_pfnVectors、".intvecs")
    void (* const g_pfnVectors [])(void)=

    (void (*)(void)((uint32_t)&_stack_top)、
    //初始堆栈指针
    ResetISR、//复位处理程序
    NmiSR、// NMI 处理程序
    FaultISR、//硬故障处理程序
    IntDefaultHandler、// MPU 故障处理程序
    IntDefaultHandler、//总线故障处理程序
    IntDefaultHandler、//用法故障处理程序
    0、//保留
    0、//保留
    0、//保留
    0、//保留
    IntDefaultHandler、// SVCall 处理程序
    IntDefaultHandler、//调试监视器处理程序
    0、//保留
    IntDefaultHandler、// PendSV 处理程序
    IntDefaultHandler、// SysTick 处理程序
    IntDefaultHandler、// GPIO 端口 A
    IntDefaultHandler、// GPIO 端口 B
    IntDefaultHandler、// GPIO 端口 C
    IntDefaultHandler、// GPIO 端口 D
    IntDefaultHandler、// GPIO 端口 E
    IntDefaultHandler、// UART0 Rx 和 Tx
    IntDefaultHandler、// UART1 Rx 和 Tx
    IntDefaultHandler、// SSI0 Rx 和 Tx
    IntDefaultHandler、// I2C0主设备和从设备
    IntDefaultHandler、// PWM 故障
    IntDefaultHandler、// PWM 发生器0
    IntDefaultHandler、// PWM 发生器1.
    IntDefaultHandler、// PWM 发生器2.
    IntDefaultHandler、//正交编码器0
    IntDefaultHandler、// ADC 序列0
    IntDefaultHandler、// ADC 序列1.
    IntDefaultHandler、// ADC 序列2.
    IntDefaultHandler、// ADC 序列3.
    IntDefaultHandler、//看门狗计时器
    Timer0IntHandler、//计时器0子计时器 A
    IntDefaultHandler、// Timer 0子计时器 B
    IntDefaultHandler、//计时器1子计时器 A
    IntDefaultHandler、//计时器1子计时器 B
    IntDefaultHandler、//计时器2子计时器 A
    IntDefaultHandler、//计时器2子计时器 B
    IntDefaultHandler、//模拟比较器0
    IntDefaultHandler、//模拟比较器1.
    IntDefaultHandler、//模拟比较器2.
    IntDefaultHandler、//系统控制(PLL、OSC、BO)
    IntDefaultHandler、//闪存控制
    IntDefaultHandler、// GPIO 端口 F
    IntDefaultHandler、// GPIO 端口 G
    IntDefaultHandler、// GPIO 端口 H
    IntDefaultHandler、// UART2 Rx 和 Tx
    IntDefaultHandler、// SSI1 Rx 和 Tx
    IntDefaultHandler、//计时器3子计时器 A
    IntDefaultHandler、//计时器3子计时器 B
    IntDefaultHandler、// I2C1主设备和从设备
    IntDefaultHandler、// CAN0
    IntDefaultHandler、// CAN1
    IntDefaultHandler、//以太网
    IntDefaultHandler、// Hibernate
    IntDefaultHandler、// USB0
    IntDefaultHandler、// PWM 发生器3.
    IntDefaultHandler、// uDMA 软件传输
    IntDefaultHandler、// uDMA 错误
    IntDefaultHandler、// ADC1序列0
    IntDefaultHandler、// ADC1序列1.
    IntDefaultHandler、// ADC1序列2.
    IntDefaultHandler、// ADC1序列3.
    IntDefaultHandler、//外部总线接口0
    IntDefaultHandler、// GPIO 端口 J
    IntDefaultHandler、// GPIO 端口 K
    IntDefaultHandler、// GPIO 端口 L
    IntDefaultHandler、// SSI2 Rx 和 Tx
    IntDefaultHandler、// SSI3 Rx 和 Tx
    IntDefaultHandler、// UART3 Rx 和 Tx
    IntDefaultHandler、// UART4 Rx 和 Tx
    IntDefaultHandler、// UART5 Rx 和 Tx
    IntDefaultHandler、// UART6 Rx 和 Tx
    IntDefaultHandler、// UART7 Rx 和 Tx
    IntDefaultHandler、// I2C2主站和从站
    IntDefaultHandler、// I2C3主设备和从设备
    IntDefaultHandler、//计时器4子计时器 A
    IntDefaultHandler、//计时器4子计时器 B
    IntDefaultHandler、//计时器5子计时器 A
    IntDefaultHandler、//计时器5子计时器 B
    IntDefaultHandler、// FPU
    0、//保留
    0、//保留
    IntDefaultHandler、// I2C4主设备和从属设备
    IntDefaultHandler、// I2C5主设备和从设备
    IntDefaultHandler、// GPIO 端口 M
    IntDefaultHandler、// GPIO 端口 N
    0、//保留
    IntDefaultHandler、//篡改
    IntDefaultHandler、// GPIO 端口 P (摘要或 P0)
    IntDefaultHandler、// GPIO 端口 P1
    IntDefaultHandler、// GPIO 端口 P2
    IntDefaultHandler、// GPIO 端口 P3
    IntDefaultHandler、// GPIO 端口 P4
    IntDefaultHandler、// GPIO 端口 P5
    IntDefaultHandler、// GPIO 端口 P6
    IntDefaultHandler、// GPIO 端口 P7
    IntDefaultHandler、// GPIO 端口 Q (摘要或 Q0)
    IntDefaultHandler、// GPIO 端口 Q1
    IntDefaultHandler、// GPIO 端口 Q2
    IntDefaultHandler、// GPIO 端口 Q3
    IntDefaultHandler、// GPIO 端口 Q4
    IntDefaultHandler、// GPIO 端口 Q5
    IntDefaultHandler、// GPIO 端口 Q6
    IntDefaultHandler、// GPIO 端口 Q7
    IntDefaultHandler、// GPIO 端口 R
    IntDefaultHandler、// GPIO 端口 S
    IntDefaultHandler、// SHA/MD5 0
    IntDefaultHandler、// AES 0
    IntDefaultHandler、// DES3DES 0
    IntDefaultHandler、// LCD 控制器0
    IntDefaultHandler、//计时器6子计时器 A
    IntDefaultHandler、//计时器6子计时器 B
    IntDefaultHandler、//计时器7子计时器 A
    IntDefaultHandler、// Timer 7子计时器 B
    IntDefaultHandler、// I2C6主设备和从设备
    I2C3_IRQHandler、// I2C7主站和从站
    IntDefaultHandler,// HIM 扫描矩阵键盘0
    IntDefaultHandler、//单线0
    IntDefaultHandler、// HIM PS/2 0
    IntDefaultHandler、// HIM LED 序列发生器0
    IntDefaultHandler、// HIM Consumer IR 0
    IntDefaultHandler、// I2C8主设备和从设备
    IntDefaultHandler、// I2C9主设备和从设备
    IntDefaultHandler // GPIO 端口 T
    };

    //
    //
    //这是处理器首次开始执行时调用的代码
    //重置事件之后。 仅执行绝对必要的设置、
    //在此之后调用应用程序提供的 entry()例程。 任何花哨的东西
    //操作(例如根据复位原因寄存器做出决策)、和
    //重置该寄存器中的位)只能由控制
    //应用。
    //
    //
    无效
    ResetISR (空)

    //
    //跳转到 CCS C 初始化例程。 这将启用
    //浮点单元,因此不需要在此处执行此操作。
    //
    _asm (".global _c_int00\n"
    " b.w _c_int00");

    //
    //
    //这是当处理器接收到 NMI 时被调用的代码。 这种情况
    //只需进入无限循环,保持系统状态以供检查
    //由调试器执行。
    //
    //
    静态空
    NmiSR (空)

    //
    //输入无限循环。
    //
    while (1)


    //
    //
    //这是处理器收到故障时调用的代码
    //中断。 这只是进入一个无限循环、从而保持系统状态
    //供调试器检查。
    //
    //
    静态空
    FaultISR (空)

    //
    //输入无限循环。
    //
    while (1)


    //
    //
    //这是处理器收到意外时调用的代码
    //中断。 这只是进入一个无限循环、从而保持系统状态
    //供调试器检查。
    //
    //
    静态空
    IntDefaultHandler (空)

    //
    //进入无限循环。
    //
    while (1)


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

    我看不到您像 下面那样调用 I2CTxFIFOConfigSet 来设置 FIFO 触发电平。 请参阅我的最后一个答复。

     I2CTxFIFOConfigSet (I2C0_BASE、 I2C_FIFO_CFG_TX_MASTER | I2C_FIFO_CFG_RX_MASTER | I2C_FIFO_CFG_TX_TRIG_2、I2C_FIFO_CFG_RX_TRIG_2);  

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

    我看到许多示例、当时我不知道如何写入该类型的 config

     I2CTxFIFOConfigSet (I2C0_BASE、 I2C_FIFO_CFG_TX_MASTER | I2C_FIFO_CFG_RX_MASTER | I2C_FIFO_CFG_TX_TRIG_2、I2C_FIFO_CFG_RX_TRIG_2);   

    调用函数,如果可能,我将使用该配置修改另一行,请在我的代码中修改。
    谢谢你


    #include
    #include
    #include
    #include "inc/hw_ints.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_NVIC.h"
    #include "inc/hw_types.h"
    #include "inc/hw_sysctl.h"
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    #include "driverlib/flash.h"
    #include "driverlib/SysTick .h"
    #include "driverlib/debug.h"
    #include "driverlib/fpu.h"
    #include "driverlib/gpio.h"
    #include "driverlib/i2c.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/rom.h"
    #include "driverlib/rom_map.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/timer.h"
    #include "driverlib/uart.h"
    #include "driverlib/udma.h"
    #include "driverlib/adc.h"
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    #include "grlib/grlib.h"
    #include "grlib/widget.h"
    #include "grlib/canvas.h"

    #include "Kentec320x240x16_ssd2119_SPI.h"
    //#include "drivers/Kentec320x240x16_ssd2119_spi.c"

    #include "utils/uartstdio.h"


    define I2C_NUM_DATA 500

    /*为 I2C 状态机定义*/

    #define I2C_MASTER_IDLE 0x0
    #define I2C_MASTER_TX 0x1
    #define I2C_MASTER_RX 0x2
    #define I2C_MASTER_Anak 0x3
    #define I2C_MASTER_DNAK 0x4
    #define I2C_MASTER_ALST 0x5
    #define I2C_MASTER_UNKN 0x6


    void ConfigureGPIO (void);
    void ConfigureI2C7 (void);
    void I2C3_IRQHandler (void);

    tContext sContext;
    tRectangle sRect;

    //
    //定义 AMS5812 I2C 地址。
    //
    //
    #define SLAVE_ADDRESS 0x78

    //
    //
    //计数已调用的中断数的计数器。
    //
    //
    静态易失性 uint32_t g_ui32Counter = 0;

    //
    //
    //系统时钟速率,单位为 Hz。
    //
    //
    uint32_t g_ui32SysClock;

    //
    //
    //包含显示的中断指示符当前值的标志
    //在 UART 上。
    //
    //
    volatile uint_fast8_t g_ui32Flags;
    volatile uint_fast8_t i2c_flag;


    //
    //
    //驱动程序库遇到错误时调用的错误例程。
    //
    //
    #ifdef 调试
    无效
    _error__(char * pcFilename、uint32_t ui32Line)


    #endif

    /* I2C 数据和状态机的变量*/


    //uint8_t sendData[I2C_NUM_DATA]={0x04、0xA5、0x36、0x67、0x44};
    uint8_t getData[I2C_NUM_DATA]={0};
    uint8_t setI2CState;
    uint8_t dataIndex;

    空 I2C3_IRQHandler (空)

    uint32_t getIntStatus;
    uint32_t getERRStatus;

    //获取中断状态并清除相同状态

    getIntStatus = MAP_I2CMasterIntStatusEx (I2C4_base、true);
    MAP_I2CMasterIntClearEx (I2C7 _BASE、getIntStatus);

    //检查我们是否有数据请求

    if ((setI2CState = I2C_MASTER_RX)&&(dataIndex < I2C_NUM_DATA-2))

    Getdata[dataIndex++]= map_I2CMasterDataGet (I2C4_base);
    MAP_I2CMasterControl (I2C7基础版、I2C_MASTER_CMD_BURST_Receive_contt);

    否则、如果((setI2CState =I2C_MASTER_RX)&&(dataIndex =I2C_NUM_DATA-2))

    Getdata[dataIndex++]= map_I2CMasterDataGet (I2C4_base);
    MAP_I2CMasterControl (I2C7基础版、I2C_MASTER_CMD_BURST_Receive_finish);

    //检查总线上是否有停止条件

    if ((getIntStatus & I2C_MASTER_INT_STOP)=I2C_MASTER_INT_STOP)

    if (setI2CState = I2C_MASTER_TX)

    setI2CState = I2C_MASTER_IDLE;

    否则、如果(setI2CState = I2C_MASTER_RX)

    Getdata[dataIndex]= map_I2CMasterDataGet (I2C4_base);
    setI2CState = I2C_MASTER_IDLE;

    //检查 I2C 总线上是否存在 ADDR NAK、数据 NAK 或 ARB 丢失情况

    if ((getIntStatus & I2C_MASTER_INT_NACK)== I2C_MASTER_INT_NACK)

    //设置错误 LED
    // map_GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、GPIO_PIN_0);

    getERRStatus = MAP_I2CMasterErr (I2C4_base);
    if ((getERRStatus & I2C_MASTER_ERR_ADDR_ACK)=I2C_MASTER_ERR_ADDR_ACK)

    setI2CState = I2C_MASTER_Anak;

    if ((getERRStatus & I2C_MASTER_ERR_DATA_ACK)=I2C_MASTER_ERR_DATA_ACK)

    setI2CState = I2C_MASTER_DNAK;

    if ((getERRStatus & I2C_MASTER_ERR_ARB_Lost)=I2C_MASTER_ERR_ARB_Lost)

    setI2CState = I2C_MASTER_ALST;



    //
    //
    //配置 UART 及其引脚。 这必须在 UARTprintf()之前调用。
    //
    //
    空配置 UART (空)

    //
    //启用 UART 使用的 GPIO 外设。
    //
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

    //
    //启用 UART0。
    //
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);

    //
    //为 UART 模式配置 GPIO 引脚。
    //
    MAP_GPIOPinConfigure (GPIO_PA0_U0RX);
    MAP_GPIOPinConfigure (GPIO_PA1_U0TX);
    MAP_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);

    //
    //初始化控制台 I/O 的 UART
    //
    UARTStdioConfig (0、115200、g_ui32SysClock);

    //
    //
    //此示例应用演示了如何使用计时器生成计时器
    //周期性中断。
    //
    //
    int main (空)

    //
    //从 PLL 以120MHz 运行。
    //注意:SYSCTL_CFG_VCO_240是 TivaWare 2.2.x 和中提供的新设置
    //之后更好地反映由于 SYSCTL_22而导致的实际 VCO 速度。
    //
    G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、120000000);

    ConfigureUART();
    ConfigureGPIO();
    配置 I2C7 ();
    I2C3_IRQHandler();

    G_ui32Counter = 0;

    //初始化显示驱动程序。

    // Kentec320x240x16_SSD2119Init (g_ui32SysClock);
    //GrContextInit (&sContext、&g_sKentec320x240x16_SSD2119);


    //启用处理器中断。
    MAP_IntMasterEnable();

    /*初始化 I2C 主设备的状态*/
    setI2CState = I2C_MASTER_IDLE;

    //在计时器运行时永久循环。
    //


    while (1)


    /*初始化 Rx 的变量*/

    setI2CState = I2C_MASTER_RX;

    dataIndex = 0;

    MAP_I2CMasterSlaveAddrSet (I2C1_base、SLAVE_ADDRESS、false);

    MAP_I2CMasterControl (I2C7基础版、I2C_MASTER_CMD_BURST_Receive_start);

    /*等待接收所有字节*/
    while (setI2CState = I2C_MASTER_RX)


    Getdata[dataIndex++];



    //
    //
    //配置 GPIO 端口 N
    //
    //


    空配置 GPIO (空)

    //
    //启用用于板载 LED 的 GPIO 端口。
    //
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);

    //
    //为 LED (PN0和 PN1)启用 GPIO 引脚。
    //
    MAP_GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0 |GPIO_PIN_1);
    MAP_GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_0 |GPIO_PIN_4);

    //
    //
    //配置 I2C 端口
    //
    //


    空配置 I2C7 (空)

    //
    //使用前必须启用 I2C7外设。
    //
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_I2C7);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);//

    //
    //等待 I2C0模块准备就绪。
    //
    while (!SysCtlPeripheralReady (SYSCTL_Periph_I2C7))


    //为端口 D0和 D1上的 I2C7功能配置引脚复用。
    //如果您的器件不支持引脚复用、则无需执行此步骤。
    //
    MAP_GPIOPinConfigure (GPIO_PD0_I2C7SCL);
    MAP_GPIOPinConfigure (GPIO_PD1_I2C7SDA);

    //
    //为这些引脚选择 I2C 功能。 此函数也会
    //为 I2C 操作配置 GPIO 引脚,将其设置为
    //开漏操作,弱上拉。 请参阅数据表
    //查看每个引脚分配了哪些功能。
    //
    MAP_GPIOPinTypeI2CSCL (GPIO_PORTD_BASE、GPIO_PIN_0);
    MAP_GPIOPinTypeI2C (GPIO_PORTD_BASE、GPIO_PIN_1);//


    //启用到处理器的中断。
    //
    MAP_IntMasterEnable();

    //
    //启用和初始化 I2C7主机模块。 使用的系统时钟
    // I2C7模块。 最后一个参数设置 I2C 数据传输速率。
    //如果为 false,则数据速率设置为100kbps,如果为 true,则数据速率将设置为
    //设置为400kbps。 在本示例中、我们将使用100kbps 的数据速率。
    //
    MAP_I2CMasterInitExpClk (I2C7基础版、g_ui32SysClock、false);

    //
    //为仲裁丢失、停止、NAK、时钟低电平启用中断
    //超时和数据
    //
    MAP_I2CMasterIntEnableEx (I2C4_base、I2C_MASTER_INT_NACK |I2C_MASTER_INT_STOP|I2C_MASTER_INT_DATA);

    /*初始化 I2C 主设备的状态*/

    setI2CState = I2C_MASTER_IDLE;
    MAP_IntEnable (I2C4_base);

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

    我很难理解您。  

    您编写了 ConfigureI2C7函数、如下所示。 我只是要求您将  I2CTxFIFOConfigSet 插入函数中。

    您有一些问题。

     您是否可以 获得一个非中断模式 I2C 来工作? 这至少表示 MCU 正在与 I2C 器件通信、并且总线上有适当的上拉电阻器和正确的从器件地址。

     -如果您在 I2C3_IRQHandler 中设置了断点,是否停止处理器? 首先要确保 I2C7正在生成中断。 如果你可以获得一个中断、那么你可以在生成一个中断前处理要接收的字节数量。  

     

    空配置 I2C7 (空)

    //
    //使用前必须启用 I2C7外设。
    //
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_I2C7);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);//

    //
    //等待 I2C0模块准备就绪。
    //
    while (!SysCtlPeripheralReady (SYSCTL_Periph_I2C7))


    //为端口 D0和 D1上的 I2C7功能配置引脚复用。
    //如果您的器件不支持引脚复用、则无需执行此步骤。
    //
    MAP_GPIOPinConfigure (GPIO_PD0_I2C7SCL);
    MAP_GPIOPinConfigure (GPIO_PD1_I2C7SDA);

    //
    //为这些引脚选择 I2C 功能。 此函数也会
    //为 I2C 操作配置 GPIO 引脚,将其设置为
    //开漏操作,弱上拉。 请参阅数据表
    //查看每个引脚分配了哪些功能。
    //
    MAP_GPIOPinTypeI2CSCL (GPIO_PORTD_BASE、GPIO_PIN_0);
    MAP_GPIOPinTypeI2C (GPIO_PORTD_BASE、GPIO_PIN_1);//


    //启用到处理器的中断。
    //
    MAP_IntMasterEnable();

    //
    //启用和初始化 I2C7主机模块。 使用的系统时钟
    // I2C7模块。 最后一个参数设置 I2C 数据传输速率。
    //如果为 false,则数据速率设置为100kbps,如果为 true,则数据速率将设置为
    //设置为400kbps。 在本示例中、我们将使用100kbps 的数据速率。
    //
    MAP_I2CMasterInitExpClk (I2C7基础版、g_ui32SysClock、false);

     I2CTxFIFOConfigSet (I2C4_base、 I2C_FIFO_CFG_TX_MASTER | I2C_FIFO_CFG_RX_MASTER | I2C_FIFO_CFG_TX_TRIG_2、I2C_FIFO_CFG_RX_TRIG_2);   

    //
    //为仲裁丢失、停止、NAK、时钟低电平启用中断
    //超时和数据
    //
    MAP_I2CMasterIntEnableEx (I2C4_base、I2C_MASTER_INT_NACK |I2C_MASTER_INT_STOP|I2C_MASTER_INT_DATA);

    /*初始化 I2C 主设备的状态*/

    setI2CState = I2C_MASTER_IDLE;
    MAP_IntEnable (I2C4_base);

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

    我是这个领域中的新用户、因此如果可能的话、我很难更好地理解我忘记了代码、并以您的方式为我提供了解决方案、如何继续接收两个字节

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

    我知道、如果您是新手、这里有一些学习曲线。 但是、这是您的学校项目、我不负责编写您的学校工作。 您的代码有什么问题? 您从未解释过哪些内容不适用于您的程序。 我们在此回答问题。 如果您不知道如何使用某些功能、并且需要有关程序调试的帮助、我们可以提供帮助。 我已经向您展示了如何调试程序。 我相信您可以做到这一点、只需遵循我提供的提示即可。 首先、在没有中断模式的情况下启动项目。 确保 MCU 正在与 I2C 器件成功通信。 接下来执行简单中断、以确保处理器可以响应中断请求。 在 I2C 中断服务例程中放置一个断点。 如果 CPU 响应中断、则它将在断点处停止。 一旦它运行、您就可以为主器件配置 RX FIFO、并将 FIFO 配置为在接收2个字节后生成中断。 我建议您也咨询您的 TA、同学或教授。  

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

    好的

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

    非常感谢先生

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

    非常感谢