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.
我正在调试代码、并在 ISR 被处理时重新启动代码。 不过、在复位后、中断停止被检测。
如果我在程序中的任何位置重新启动代码、则不会出现此问题、但如果我在 ISR 中复位代码、则会发生此问题。
注意:我在 ISR 开始时清除中断。
这是正常现象还是有解决此问题的方法?
我的代码:
/*! *@作者 Yash Bansod *@日期 2017年9月19日 * *@简介 PWM 伺服 *@详细信息 程序通过 *控制外部伺服电机的位置 改变 PWM 的占空比。 占空比可增加 * 单击板载开关 SW2 (PF0)或通过单击 SW1 (PF4)减小。 * PWM 模块。 *@注意 tm4c123ghpm_startup_ccs.c 包含 *的矢量表 微控制器。 它经过修改、可在 *上执行指定的 ISR Timer0A 和 PortF 中断。 */ /*------------------ 包含文件 ---------- */ #include //标准整数类型库 #include //标准布尔类型库 #include "inc/tm4c123gh6m.h" // Tiva C #include "inc/hw_memmap.h"上中断和寄存器分配的定义 //定义 Tiva C 系列器件存储器映射 的宏#include "inc/hw_types.h" //定义常用类型和宏 #include "inc/hw_gpio.h" //为 GPIO 硬件定义宏 #include "inc/hw_pwm.h" //为脉宽调制(PWM)端口 #include "driverlib/debug.h"定义和宏 //用于帮助调试驱动程序库 #include "driverlib/PWM.h"的宏 // PWM 端口的 API 函数原型 #include "driverlib/sysctl.h" //为 DriverLib 的系统控制 API 定义和宏#include "driverlib/interrupt.h" //为 DriverLib 的 NVIC 控制器 API 定义和宏#include "driverlib/gpio.h" //为 DriverLib 的 GPIO API 定义和宏 #include "driverlib/pin_map.h" //所有器件的外设到引脚的映射 #include "driverlib/rom.h" //为 driverLib 的 ROM API 定义和宏 #define PWM_FREQUENCY 50 //为 PWM 信号的频率定义一个宏,单位为 Hz /*------ 全局变量 ---------- /uint32_t ui32Period; //用于存储 PWM 时间周期 的变量 volatile uint8_t ui8Adcust = 75; //可用于存储 LED 占空比的变量 /*------ 函数原型 ---------- */ void PortFIntHandler (void); // GPIO 端口 F ISR 的原型 /*------------------------------------------------------- 主程序 ---------- */ int main (void){ //将系统时钟设置为80MHz,将 PWM 模块时钟设置为1.25MHz ROM_SysCtlClockSet (SYSCTL_SYSDIV_2_5 |SYSCTL_USE_PLL |SYSCTL_OSC_MAIN |SYSCTL_XTAL_16MHz); ROM_SysCtlPWMClockSet (SYSCTL_PWMDIV_64); //启用外设 PortF、PortD 和 PWM1的时钟 ROM_SysCtlPeripheralEnable (SYSCTL_Periph_PWM1); ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD); ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF); //将 PD0配置为 PWM 信号(PWM 模块1发生器0) ROM_GPIOPinTypePWM (GPIO_PORTD_BASE、GPIO_PIN_0); ROM_GPIOPinConfigure (GPIO_PD0_M1PWM0); //删除开关 SW2 (连接到 PF0)上的锁定并提交更改 HWREG (GPIO_PORTF_BASE + GPIO_LO_LOCK)= GPIO_LOCK_KEY; HWREG (GPIO_PORTF_BASE + GPIO_CR)|= GPIO_PIN_0; HWREG (GPIO_PORTF_BASE + GPIO_LO_LOCK)= 0; //将 PF0、PF4设置为输入并将其配置为上拉 ROM_GPIODirModeSet (GPIO_PORTF_BASE、GPIO_PIN_4|GPIO_PIN_0、GPIO_DIR_MODE_IN); ROM_GPIOPadConfigSet (GPIO_PORTF_BASE、GPIO_PIN_4 | GPIO_PIN_0、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU); //为 PF0和 PF4配置和启用中断 ROM_IntEnable (INT_GPIOF); ROM_GPIOIntTypeSet (GPIO_PORTF_BASE、GPIO_PIN_4 | GPIO_PIN_0、GPIO_FALLING_EDGE); GPIOIntEnable (GPIO_PORTF_BASE、GPIO_INT_PIN_0 | GPIO_INT_PIN_4); //主机中断启用所有中断的 API ROM_IntMasterEnable(); //计算 PWM 模块的定时器周期。 uint32_t ui32PWMClock = SysCtlClockGet ()/64; ui32Period =(ui32PWMClock / PWM_FREQUENCY)- 1; //将 PWM1 Genrator0配置为在递减计数模式下工作 ROM_PWMGenConfigure (PWM1_base、PWM_GEN_0、PWM_GEN_MODE_DOWN); //将计算的时间段加载到 PWM1模块的 Generator0 ROM_PWMGenPeriodSet (PWM1_base、PWM_GEN_0、ui32Period); //将 PWM 占空比设置为指定值 ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_0、ui8Adust * ui32Period / 1000); //启用 PWM 模块1的 PWM0引脚作为输出 ROM_PWMOutputState (PWM1_base、PWM_OUT_0_bit、true); //启用 PWM 发生器 ROM_PWMGenEnable (PWM1_base、PWM_GEN_0); while (1); }/* ------------------------------------------------------- 函数定义 ---------- // void PortFIntHandler (void){ //用于 GPIO PortF 中断处理的 ISR GPIOIntClear (GPIO_PORTF_BASE、GPIO_INT_PIN_4 | GPIO_INT_PIN_0); //如果按下 SW1 (PF4)、则减小占空比 if (ROM_GPIOPinRead (GPIO_PORTF_BASE、GPIO_PIN_4 | GPIO_PIN_0)= GPIO_PIN_0){ ui8Adife--; if (ui8Adust < 50){ ui8Ad正义= 50; } ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_0、ui8Adust * ui32Period / 1000); } //如果按下 SW2 (PW0)、则增加占空比 if (ROM_GPIOPinRead (GPIO_PORTF_BASE、GPIO_PIN_4 | GPIO_PIN_0)= GPIO_PIN_4){ ui8Adife++; if (ui8Adust > 100){ ui8Adsit= 100; } ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_0、ui8Adust * ui32Period / 1000); } }
描述的很好,布置的很好——干得好。 (IMHO)
我们是否可以问:
好的、我们知道几乎所有缺失的细节! CB1的问题"您确定如何重置"、刚刚暂挂? 您是否在 SysCtlClockSet 行附近的某个位置设置了断点、是吗?
不过,正如查尔斯所指出的,那个箭头没有太多的作用,它并不是一个真正的重置。 我想基本答案是:调试时不要依赖它。
Charles、通过"只需单击系统重置"、您是否意味着 CCS 界面上有一些隐藏的命令? 还是板上的物理复位按钮? 当然、第二个选项会进一步破坏正在进行的调试器、对吧?