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/TM4C123GH6PM:将 GPIO 引脚配置为中断

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/605119/ccs-tm4c123gh6pm-configure-gpio-pin-as-interrupt

器件型号:TM4C123GH6PM

工具/软件:Code Composer Studio

您好!

  我对 GPIO 的一般配置以及中断的概念也有一定的了解。 能不能有人为我提供了一些有关如何将 GPIO 引脚配置为中断的详细信息、我介绍了提供 interrupt.c 文件的示例。 我获得的 信息不清楚。 那么、是否有人可以向我提供详细信息? 将 GPIO 配置为中断的步骤。  提前感谢。

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

    以下是 Tiva Ware 外设驱动程序用户指南中的一个示例:

    Int32_t i32Val;
    //
    启用 GPIOA 外设
    //
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
    //
    等待 GPIOA 模块准备就绪。
    //
    while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOA)
    ){
    }
    //
    注册端口级中断处理程序。 此处理程序是所有
    引脚中断的第一个//级别中断处理程序。
    //
    GPIOIntRegister (GPIO_Porta_base、PortAIntHandler);
    //
    初始化 GPIO 引脚配置。
    //
    //将引脚2、4和5设置为输入,软件控制。
    //
    GPIOPinTypeGPIOInput (GPIO_Porta_base、GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5);
    //
    将引脚0和3设置为输出、软件控制。
    //
    GPIOPinTypeGPIOOutput (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_3);//
    使引脚2和4上升沿触发中断。
    //
    GPIOIntTypeSet (GPIO_Porta_base、GPIO_PIN_2 | GPIO_PIN_4、GPIO_RISING _EDGE);
    //
    使引脚5成为高电平触发中断。
    //
    GPIOIntTypeSet (GPIO_Porta_base、GPIO_PIN_5、GPIO_HIGH_LEVEL);
    //
    读取一些引脚。
    //
    i32Val = GPIOPinRead (GPIO_Porta_base、(GPIO_PIN_0 | GPIO_PIN_2 | GPIO_PIN_3 |GPIO_PIN_4 | GPIO_PIN_5));
    //
    写入一些引脚。 即使指定了引脚2、4和5、这些引脚
    //也不受此写入的影响、因为它们被配置为输入。 在
    //写入结束时、引脚0为低电平、引脚3为高电平。
    //
    GPIOPinWrite (GPIO_PORta_base、(GPIO_PIN_0 | GPIO_PIN_2 | GPIO_PIN_3 |GPIO_PIN_4 | GPIO_PIN_5)、
    (GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 |GPIO_PIN_7));
    //
    启用中断引脚。
    //
    GPIOIntEnable (GPIO_Porta_base、GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5); 

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

    供应商的 Bob 在这里回答了海报的"GPIO 中断"问题。    但是、"MCU 外设中断"进行比较/对比时、此类"GPIO 中断"的编码存在细微差异。

    我的目的是强调这一差异-因为到达这里的人可能会尝试"模拟"此"GPIO 中断代码格式"以供"外设中断"使用-这是无法成功的!

    请注意提供的供应商编码示例中的最后一个函数调用:  (上面)

    "GPIOIntEnable (GPIO_Porta_base、GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5);"

    如果是 GPIO 中断、这就足够了、但在所有"外设中断"编码中、还需要再进行一次函数调用!

    以下两个示例可有效地说明: (注意两个带突出显示的函数调用-绝对"类外设中断所需")

    PWMIntEnable (PWM0_BASE、PWM_INT_GEN_0);
    IntEnable (INT_PWM0_0);

    TimerIntEnable (WTIMER 0_BASE、TIMER_TIMA_TIMEOUT);
    IntEnable (INT_WTIME0A);  

    基于 GPIO 的中断"转义"这一(额外)函数调用要求-但必须采用-当尝试完全启用 "外设中断!"时     这种情况下的值为:"每个中断源都可以通过 IntEnable()单独启用。"     (并通过 IntDisable()单独禁用-需要时和 IF -)。

    对于那些有足够高的时令或足够无聊的人,请他们(更多)寻求以下邀请: "">e2e.ti.com/.../2227949

    [编辑] 公司和我都没有使用"Tivaint"-然而、我们首选的"StellarisWare" (建议)证明 它(也许)有必要部署"GPIOPinIntEnable()"来 完全/正确启用 单个引脚中断和中断源。    (该练习-留给(好奇)读者...)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您现在的回复、您在上面给出的示例中清楚地了解了 GPIO 中断。

    此致

    Niranjan Kumar.C.D.