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.

[参考译文] RTOS/TM4C123GE6PM:如何触发 GPIO 中断并运行函数

Guru**** 2446730 points
Other Parts Discussed in Thread: EK-TM4C123GXL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/634504/rtos-tm4c123ge6pm-how-to-trigger-a-gpio-interrupt-and-run-a-function

器件型号:TM4C123GE6PM
Thread 中讨论的其他器件:EK-TM4C123GXL

工具/软件:TI-RTOS

您好!

我对触发 GPIO 中断后如何运行函数有一些疑问。 我已经介绍了 GPIO 中断示例、在修改它以处理我想要执行的操作时遇到了一些问题。

  • 任务:测量 GPIO 从"高电平"变为"低电平"所需的时间。 当 GPIO 为"低电平"时、触发一个中断来运行一个记录该时间(以节拍为单位)的函数。

下面是我为完成上述任务而编写的内容。 代码能够运行、但立即退出(循环不执行任何操作时无限)。 我希望有人能向我解释我出错的地方以及如何解决。

=== code====

int main (空)

//假设已调用所有外设和基本初始函数

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);//设置

GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_4);//稍后设置为输出以将引脚驱动为高电平

/*我的传感器连接到 PF4、我希望它在检测到引脚中的"低电平"时标记中断*/

GPIOIntTypeSet (GPIO_PORTF_BASE、GPIO_PIN_4、GPIO_LOW_LEVEL);

/*告诉 RTOS 在发生中断时要转到哪个函数,我认为这是我遇到问题的地方,因为第一个参数应该是数组中的 int 索引号*/
GPIO_setCallback (GPIO_PIN_4、lightSensorCalculation);

/*启用中断;这里有同样的问题*/
GPIO_enableInt (GPIO_PIN_4);


GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_4、0x00000010);//将引脚设置为高电平(我认为、但无法在数据表中进行验证)
SysTickPeriodSet (1000);//针对"节拍计数器"进行设置
SysTickEnable();
SysCtlDelay (100);//延迟将 GPIO 时间设置为高电平
GPIOPinTypeGPIOInput (GPIO_PORTF_BASE、GPIO_PIN_4);//现在设置为读取引脚

/*启动 BIOS */
BIOS_start();

/*当 GPIO 检测到"低电平"时、我希望此函数在触发中断时运行*/

void lightSensorCalculation (void)

uint32_t lightSensorValue = 0;

lightSensorValue = SysTickValueGet ();//获取自将 GPIO 设置为高电平以来的节拍数

UARTprintf ("%d\n"、lightSensorValue);//打印到 putty

HWREG (NVIC_ST_CURRENT)= 1;//复位节拍计数

SysTickDisable();//禁用 tick 函数,以防止它再次计数

===代码结束===

我还为希望查看所有内容的人员附加了我的整个文件。 提前感谢您的帮助。

/cfs-file/__key/communityserver-discussions-components-files/908/light_5F00_sensor_5F00_demo.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Henry、
    您是否应该先使用 GPIOPinTypeGPIOInput 将 PF4配置为输入引脚、并在引脚上提供高电平->低电平输入、以便 GPIO 生成中断?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、感谢您的快速响应。

    我不确定我是否关注您。 我应该澄清为什么我认为从输出到输入是合理的。

    因此、我的想法是使引脚输出并将光反射传感器驱动为高电平。 然后、我将引脚切换至输入、以便 Tiva-C 可以读取它并检测它何时处于低电平并触发中断。

    我使用的方法是传感器制造商推荐的。 4步指令位于"将 QTR-1RC 输出连接到数字 I/O 线路" www.pololu.com/.../2459下
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Henry、
    如果要将引脚配置为推挽式、则外部器件需要驱动输入。 否则、该引脚保持悬空。 您能否在示波器上监控 PF4?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    目前还不是这样、但是这是一个类项目、并且之前使用相同的组件实现了该方法、因此我相信该想法是可行的、而是我的代码导致了该问题。 您是否会建议以不同的方式实现它?

    我计划再次访问 RTOS 实验课程、但我不记得它们使用任何 GPIO 中断。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您的项目很简单、我建议您从非 RTOS 项目开始。 TivaWare 库中有非 RTOS GPIO 中断示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为,在时间有限的情况下,这是理想的做法。 我可以在 Resource Explorer 上找到它吗? 我不确定 TivaWare 库是什么意思。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以通过此链接下载 TivaWare 库。

    安装 TivaWare 库后、您可以在下找到许多示例 \examples\boards\ek-tm4c123gxl。 目录下有一个中断示例、其中 GPIO 引脚用于配置中断生成。

    虽然不是 TI-RTOS 专家、但我认为您的现有代码可能会与 GPIO_setCallback()有关如何将回调函数与引脚关联的问题。 使用 GPIO_setCallback()时,应指定回调函数数数数数组的第一个参数的索引号。 请看一下您可以下载的 GPIO 中断示例、如下所示。 在此示例中、 GPIO_setCallback (Board_BUTTON0、gpioButtonFxn0)用于通过  Board_BUTTON0注册回调 gpioButtonFxn0。  BOARD_BUTTON0是回调函数数数数数数组的索引0。 在 EK_TM4C123GXL.h 文件中检查 EK_TM4C123GXL_GPIOName、其中 BOARD_BUTTON0等于 EK_TM4C123GXL_SW1、是该数组的第一个元素。 您可以尝试#define GPIO_PIN_4 EK_TM4C123GXL_SW1并查看它是否起作用。 我认为 TI-RTOS 有一些学习曲线。 如果您可以为您的项目使用 RTOS、我建议您在没有 RTOS 的情况下执行项目、以便先使基础知识正常工作。 我自己也在学习 TI-RTOS。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    啊、是的、这是我最初参考的示例;但是、我没有考虑将 BOARD_BUTTON0换成 GPIO_PIN_4EK。 感谢您的建议。

    要清楚一点、您引用的是 Resource Explorer 上的 TivaWare 示例还是 RTOS 示例的映像? 因为我认为 GPIO 中断示例使用的是 RTOS。

    谢谢你
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    该图像用于 TI-RTOS GPIO 中断示例。 如前所述、您应从 http://www.ti.com/tool/SW-TM4C 下载 TivaWare 库。 在 TivaWare 下、您可以找到所有非 TIRTOS 示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的帮助、我将下载这些文件并查看它们!