主题中讨论的其他器件: TM4C123AH6PM、 TM4C129ENCPDT
大家好。 我目前正在使用 TIvaware 中的 timer.c、并构建了一个代码来将其用于超声波传感器。 我的问题是、我的中断永远不会被呼叫。 我将包含我的部分代码、希望有人能帮我解决问题。 提前感谢。
信息: 我正在使用 Timer1、因此我使用 PF2和 PF3。 程序不断被占用 while flagB 循环、并且永远不会退出、因为中断 TIMER1BHANDLER 永远不会运行、因此 flagB 不会更新为1。
#include "timer.h"#include #include "tm4c123ghp6.h" #include "interrupt.h" #include "sysctl.h" #define Timer1 0x40031000 #define perodo 62.5 #define echo 0x04 //PF2 #define TRIG 0x08 //pF3 uint8_t flagB; void ConfigGPIO (void){ SYSCTL_RCGCGPIO_R |= 0x20; while (!(SYSCTL_PRGPIO_R 和0x20)); GPIO_PORTF_DIR_|= TRIG; GPIO_PORTF_DIR_R &=~μ s (回波); GPIO_PORTF_AFSEL_R |=(TRIG|ECHO); GPIO_PORTF_PCTL_R |=(GPIO_PORTF_PCTL_R 和0xFFFFFF")| 0x7700; GPIO_PORTF_AMSEL_R &=~Ω(ECHO|TRIG); GPIO_PORTF_DEN_R ||(ECHO|TRIG); } void ConfigHCSR04 (void){ SysCtlPeripheralEnable (SYSCTL_Periph_Timer1); while (!SysCtlPeripheralReady (SYSCTL_Periph_Timer1)); TimerDisable (Timer1、timer_both); //(T1CCP0连接回波。) TimerConfigure (Timer1、(TIMER_CFG_SPLIT_PAGE|TIMER_CFG_A_CAP_TIME|TIMER_CFG_B_ONE_SHOT)); TimerControlEvent (Timer1、timer_A、timer_event_both _edge); TimerControlEvent (Timer1、timer_B、timer_event_NEG_EDGE); TimerIntEnable (Timer1、(TIMER_CAP_EVENT|TIMER_TIMB_TIMEOUT)); TimerIntRegister (Timer1、timer_A、Timer1AHandler); TimerIntRegister (Timer1、Timer_B、Timer1BHandler); IntMasterEnable(); IntEnable (INT_TIMER1B); IntEnable (INT_TIMER1A); //TimerA 24位。 TimerB 16位。 TimerPrescaleSet (Timer1、Timer_A、0xFF); TimerLoadSet (Timer1、timer_A、0xFFFF); TimerLoadSet (Timer1、timer_B、(10000/周期数));// 10 us 内超时 TimerEnable (Timer1、timer_A); } void Timer1BHandler (void){ GPIO_PORTF_DATA_R &=~Ω(TRIG); TimerIntClear (Timer1、TIMER_TIMB_TIMEOUT); flagB = 1; } void main (void){ ConfigHCSR04(); ConfigGPIO(); while (1){ 如果(!(GPIO_PORTF_DATA_R 和 ECHO)){// Si no estoy haciendo medicion entones emito ultrasonido。 GPIO_PORTF_DATA_R |= TRIG; TimerEnable (Timer1、Timer_B); while (!flagB); 标志 B = 0; } }