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.
我对 Tiva 很陌生、而且微处理器一般而言、因此很抱歉、我的问题似乎很基本。 我已经阅读了相关的技术讲座材料并看到了一些示例代码、但我仍然不理解我的代码不起作用的原因。 我将向 GPIO 引脚 B6馈送 PWM 信号。 我尝试在捕获模式下配置两个计时器、Timer0A 应在上升沿触发 ISR、TIMER0B 应在下降沿触发 ISR。 我已按照在研讨会中的说明更改了相应的启动文件、并且能够使研讨会示例正常工作、但是我似乎无法让计时器在捕获模式下工作。 当我进行调试时、我可以看到 GPIO PB6寄存器中的数据发生了变化、但从未调用过 ISR。 这是我的代码。
#include #include #include #include #include include "driverlib/pin_map.h" #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "inc/hw_gpio.h" #include "driverlib/mdio.h" #include "driverlib/mdriver.h"#include "driverlib#driver.h"#include "driverlib#driverlib.driver.h"#include "driverlib#driverlib#driver.h"#driverlib#driverlib#include "driver.h/driverlib#include "driverlib#driver.h"#include "driverlib#driverlib#driverlib#driver.h"#include "driverlib#driverlib#driver.h"#include "driverlib#driverlib#driver.h"#driverlib#driverlib#driver.h"#include "driverlib#include "driverlib#driverlib#driver.h"#driverlib#driver.h"#include "driverlib#driverlib#driverlib#driver.h"#include "driverlib.md. //读取 GPIO 引脚的当前状态(蓝色 LED)和 //将相反状态写回 if (GPIOPinRead (GPIO_PORTF_BASE、GPIO_PIN_2) { GPIOPinWrite (GPIO_PORT_BASE、GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3、0); }GPIOPIN_BASE (GPIO_POINTE_INTE_GPIORT0) 、GPIORT0 (GPIO_PER_INT_GPIORT0)、GPIO_INBENTRIP_POIN_IN_INBENTRIP_POINT (GPIORT0)、GPIORT0)、GPIORP0 (GPIORT0)、GPIOR_IN_IN_IN_IN_IN_IN_IN_IN_INTRIP_IN_INB_INTRIP_INTE_IN_INTRIP_POINT (GPIORT0)、GPIORT0)、GPIORT0 (GPIOR_IN_IN_IN_IN_IN_IN_INT_ else { GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、4); } // * main.c * / int main (void){ SysClockSet (SYSCTL_4|SYSCTL_USE_PLL|SYSCTL_USE_PLL|SYSCTAL_16MHz|SysCtl_OSC_MAIN )、GPIO_PERIPB_GPTO_6_PHIN (GPIO_PEL)、GPIO_PERIPB_TO_TO_PHIN (GPIO_PEL) GPIO_PIN_TYPE_STD_WPU); GPIOPinConfigure (GPIO_PB6_T0CCP0); GPIOPCtlPinTypeTimer (GPIO_PORTB_BASE、GPIO_PIN_6); //启用 GPIO 时钟 SysEnable (SYSCTL_Periph_GPIOF); //将 GPIO 引脚配置为输出 GP_PIN_TRIP_0_TRIP_TIME_TRIP_TRIP_TRIP_TIME_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_0_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_0_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_0 (GPIO_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_0); Timer_A、TIMER_EVENT_POS_EDGE); TimerControlEvent (TIMER0_BASE、TIMER_B、TIMER_EVENT_NEG_EDGE); TimerIntEnable (TIMER0_BASE、TIMER_CAPA_EVENT); TimerIntEnable (TIMER0_BASE、TIMER_CAPB_EVENT); TimerIntRegister (TIMER0_BASE、 Timer_A、RisingEdgeInt); TimerIntRegister (TIMER0_BASE、TIMER_B、FallingEdgeInt); TimerIntClear (TIMER0_BASE、TIMER_CAPA_EVENT); TimerIntClear (TIMER0_BASE、TIMER_CAPB_EVENT); //使处理器响应中断 IntMasterEnable (); IntEnable (INT_TIMER0A); IntEnable (INT_TIMER0B); //使能处理器响应中断 IntMasterEnable (TIMER0 ) ;timer_base (TIMER0);timer0 (timer_return);timer_timer 0 (while)
[引用用户="Elsa Riachi97"]我已按照研讨会中的解释方式更改了相应的启动文件[/引用]
Elsa、
有两种方法可以分配哪个函数用于出席中断:在单独的文件(通常为* startup_ccs.c)内,或者在主程序本身期间,使用 TivaWare 函数(如 TimerIntRegister())。
启动文件的使用会更加复杂、因为它需要编辑"主代码之外的代码"。 但速度更快、因为中断地址直接存储在默认位置。
使用诸如 TivaWare 的运行时注册更容易可视化、并且更方便创建"可移植函数"-但是当中断发生时、它通常需要额外的处理。
您在上面的句子中建议您同时使用这两种方法-这可能是冲突的。 在进入计时器中断之前、您是否尝试创建一个简单的"GPIO 按钮中断"、只是为了确保中断概念正确且正常工作?
另一件事:您将 TIMER0_BASE 用于两个信号:
[引用用户="Elsa Riachi97"]定时器配置(TIMER0_BASE、TIMER_CFG_A_CAP_TIME);定时器配置(TIMER0_BASE、TIMER_CFG_B_CAP_TIME);[/引用]
第二行实际上会覆盖第一行、因为它们处理的是同一个寄存器。 您需要使用 TIMER_CFG_SPLIT_PAIR 以及同一调用中两个计时器中的每个计时器的参数。
最后、我看到您没有将任何值加载到您的计时器限制中。 我不确定这是否是捕获信号转换中断所必需的、但您可能需要测试并发布结果。 如果需要,请将计时器限制值加载到不同于零的值,以防万一-使用 TimerLoadSet();
此致、
布鲁诺