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
