大家好、我遇到了 SysTick 中断问题。 为了确保一切都正确、我从互联网上下载了工作代码、但也无法正常工作。 程序进入 HardFault_Handler 而不是 SysTick 处理程序。 您能不能帮助我、代码非常简单、我花了3天时间尝试找出问题所在。
整个项目文件: e2e.ti.com/.../Systickint.rar
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.
大家好、我遇到了 SysTick 中断问题。 为了确保一切都正确、我从互联网上下载了工作代码、但也无法正常工作。 程序进入 HardFault_Handler 而不是 SysTick 处理程序。 您能不能帮助我、代码非常简单、我花了3天时间尝试找出问题所在。
整个项目文件: e2e.ti.com/.../Systickint.rar
启动文件如下所示。 我认为一切都是正确的。 您能在这里看到任何问题了。
extern language=extended
#pragma segment="CSTACACK"
void __IAR_program_start( void );
extern void NMI_Handler ( void );
extern void HardFault_Handler( void );
extern void
BusFault_Handler ( void );
extern void UsageFault_Handler ( void );
void
Pendon( void )
extern void SysTick _Handler (void);
typedef void (* intfunc)(void);
typedef union{intfunc __fFun;void *__ptr;}intvec_elem;
//矢量表通常位于地址0。
//在 RAM 中调试时、它可以位于 RAM 中、至少对齐到2^6。
//如果需要定义中断服务例程,
//复制此文件并将其包含在项目中。
//名称"_vector_table"对于 C-SPY 具有特殊意义、//
是查找 SP 起始值的位置。
//如果向量表不在地址0,用户必须在
使用中断前初始化// NVIC 向量表寄存器(VTOR )。
#pragma LOCATION =".intvec"
const intvec_elem __vector_table[]=
{
._ptr =__SFE ("CSTACK")}、
__IAR_program_start、
NMI_Handler、
HardFault_Handler、
MemManage_Handler、
BusFault_Handler、
UsageFault_Handler、
0、
0、
0、
0、
SVC_Handler、
DebugMON_Handler、
0、
PendSV_Handler、
SysTick 处理
程序};
#pragma call_graph_root =“interrupt”
__weak niNMI_Handler (void){ while (1){}
#pragma call_graph_root =“interrupt”
__weak HardFault_Handler (void){ while (1){}#pragma
call_MemManage_root =“interrupt"
__weak Hardault_Handler (void) {while (1){}#pragma
call_graph_root ="interrupt"
__weak BusFault_Handler (void){while (1)}{
#pragma call_graph_root ="interrupt"
__weak UsageFault_Handler (void){while (1)}}}#pragma
call_graph_root ="interrupt"__ssvault 处理程序(void)
{while (1){}#pragma
call_graph_root ="interrupt"
__weak DebugggMon_Handler (void){while (1)}{
#pragma call_graph_root ="interrupt"
__weak Pendvoid _Handler (void){while (1){}}#Syma
call_graph_root ="interrupt"
_ pragma void (void) {while (1){}
void __cmain (void);
__weak void __IAR_init_core (void);
__weak void __IAR_init_vfp (void);
#pragma required=__vector_table
void __IAR_program_start (void)
{_IAR_core()
;
__Vfp_init_vfp
(void);__Vfp (void)
非常感谢 Robert。 3天后、它能正常工作、谢谢您。 但我注意到了一些奇怪的东西。 当我放置 printf ("%d\n"、NVIC_ST_CURRENT_R)时;在 while 循环中、为了查看 SysTick 的当前值、中断正常工作(LED 闪烁)。 但是、当我擦除该线路中断时、它停止工作并保持在主代码中的 while 循环中。 重要的一点是、我没有启用全局中断。 即使我在 while 循环中放置 printf ("%d\n"、NVIC_ST_CURRENT_R)时未启用全局中断、它也起作用。 我无法低估它的工作方式。 此外、在 SysTick 中断工作时、我放置一个 printf ("entered");在 SysTick 处理程序函数中 、为了确保程序进入该函数、它会进入 FaultISR。 printf()对 interrupts 有何影响。 我共享 startup 和 main 下面的代码。
main.c
#include
#include
#include "inc/tm4c123gh6m.h"
volatile unsigned long counts=0;
void SysTick _Init (unsigned long period){// priority 2
NVIC_ST_CTRL_R = 0; //在设置过程中禁用 SysTick
NVIC_ST_RELOAD_R = PERIO-1;//重新加载值
NVIC_ST_CURRENT_R = 0; //对当前的任何写入都会将其清除
NVIC_SYS_PRI3_R =(NVIC_SYS_PRI3_R&0x00FFFFFF)|0x40000000;
NVIC_ST_CTRL_R = 0x07;//使用内核时钟和中断启用 SysTick
//完成所有初始化,然后启用中断
}
void SysTick 处理程序(void){
GPIO_PORTF_DATA_R ^= 0x04; //切换 PF2
计数=计数+ 1;
// printf ("enter");
}
int main (void)
{
volatile uint32_t ui32Loop;
//
//启用用于板载 LED 的 GPIO 端口。
//
SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOF;
//
//执行虚拟读取以在启用外设后插入几个周期。
//
ui32Loop = SYSCTL_RCGC2_R;
计数= 0;
//
//为 LED 启用 GPIO 引脚(PF2)。 将方向设置为输出、然后
//启用 GPIO 引脚以实现数字功能。
//
GPIO_PORTF_DIR_R = 0x04;
GPIO_PORTF_AFSEL_R &=~0x04;//禁用 PF2上的 alt funt
GPIO_PORTF_DEN_R = 0x04;
GPIO_PORTF_PCTL_R =(GPIO_PORTF_PCTL_R&0xFFFFFF+ 0x00000000;
GPIO_PORTF_AMSEL_R = 0; //禁用 PF 上的模拟功能
SysTick Init (16000); //每1ms 初始化一次 SysTick 计时器
//
//永久循环。
//
while (1)
{
printf ("%d\n"、NVIC_ST_CURRENT_R);
}
}
startup.c
#include
#include "inc/hw_NVIC.h"
#include "inc/hw_types.h"
//*********
//
//为此源文件启用 IAR 扩展。
////
*****************
#pragma language=extended
//*********
//
//转发默认故障处理程序的声明。
////
*****************
void ResetISR (void);
static void NmiSR (void);
static void FaultISR (void);
extern void SysTick 处理程序(void);
static void IntDefaultHandler (void);
//
//
//应用程序启动代码的入口点。
////
*****************
extern void __IAR_program_start (void);
//*********
//
//为系统堆栈保留空间。
////
*****************
静态 uint32_t pui32stack[64]@".noinit";
//*********
//
//描述向量表条目的联合体。 需要使用 union
//、因为第一个条目是栈指针、而余数是函数
//指针。
////
*****************
typedef union
{
void (* pfnHandler)(void);
uint32_t ui32Ptr;
}
uVectorEntry;
//*********
//
//矢量表。 请注意、必须在这个上放置适当的结构、以
//确保它在物理地址0x0000.0000处结束。
////
*****************
__root const uVectorEntry __vector_table[]@".intvec"=
{
{.ui32Ptr =(uint32_t) pui32Stack + sizeof (pui32Stack)}、
//初始堆栈指针
ResetISR、 //重置处理程序
NmiSR、 // NMI 处理程序
FaultISR、 //硬故障处理程序
IntDefaultHandler、 // MPU 故障处理程序
IntDefaultHandler、 //总线故障处理程序
IntDefaultHandler、 //用法故障处理程序
0、 //保留
0、 //保留
0、 //保留
0、 //保留
IntDefaultHandler、 // SVCall 处理程序
IntDefaultHandler、 //调试监视器处理程序
0、 //保留
IntDefaultHandler、 // PendSV 处理程序
SysTick 处理程序、 // SysTick 处理程序
IntDefaultHandler、 // GPIO 端口 A
IntDefaultHandler、 // GPIO 端口 B
IntDefaultHandler、 // GPIO 端口 C
IntDefaultHandler、 // GPIO 端口 D
IntDefaultHandler、 // GPIO 端口 E
IntDefaultHandler、 // UART0 Rx 和 Tx
IntDefaultHandler、 // UART1 Rx 和 Tx
IntDefaultHandler、 // SSI0 Rx 和 Tx
IntDefaultHandler、 // I2C0主机和从机
IntDefaultHandler、 // PWM 故障
IntDefaultHandler、 // PWM 发生器0
IntDefaultHandler、 // PWM 发生器1
IntDefaultHandler、 // PWM 发生器2.
IntDefaultHandler、 //正交编码器0
IntDefaultHandler、 // ADC 序列0
IntDefaultHandler、 // ADC 序列1
IntDefaultHandler、 // ADC 序列2.
IntDefaultHandler、 // ADC 序列3.
IntDefaultHandler、 //看门狗计时器
IntDefaultHandler、 // Timer 0子计时器 A
IntDefaultHandler、 // Timer 0子计时器 B
IntDefaultHandler、 //计时器1子计时器 A
IntDefaultHandler、 //计时器1子计时器 B
IntDefaultHandler、 //计时器2子计时器 A
IntDefaultHandler、 //计时器2子计时器 B
IntDefaultHandler、 //模拟比较器0
IntDefaultHandler、 //模拟比较器1
IntDefaultHandler、 //模拟比较器2.
IntDefaultHandler、 //系统控制(PLL、OSC、BO)
IntDefaultHandler、 //闪存控制
IntDefaultHandler、 // GPIO 端口 F
IntDefaultHandler、 // GPIO 端口 G
IntDefaultHandler、 // GPIO 端口 H
IntDefaultHandler、 // UART2 Rx 和 Tx
IntDefaultHandler、 // SSI1 Rx 和 Tx
IntDefaultHandler、 //计时器3子计时器 A
IntDefaultHandler、 //计时器3子计时器 B
IntDefaultHandler、 // I2C1主设备和从设备
IntDefaultHandler、 //正交编码器1
IntDefaultHandler、 // CAN0
IntDefaultHandler、 // CAN1
IntDefaultHandler、 // CAN2
0、 //保留
IntDefaultHandler、 //休眠
IntDefaultHandler、 // USB0
IntDefaultHandler、 // PWM 发生器3.
IntDefaultHandler、 // uDMA 软件传输
IntDefaultHandler、 // uDMA 错误
IntDefaultHandler、 // ADC1序列0
IntDefaultHandler、 // ADC1序列1
IntDefaultHandler、 // ADC1序列2.
IntDefaultHandler、 // ADC1序列3.
0、 //保留
0、 //保留
IntDefaultHandler、 // GPIO 端口 J
IntDefaultHandler、 // GPIO 端口 K
IntDefaultHandler、 // GPIO 端口 L
IntDefaultHandler、 // SSI2 Rx 和 Tx
IntDefaultHandler、 // SSI3 Rx 和 Tx
IntDefaultHandler、 // UART3 Rx 和 Tx
IntDefaultHandler、 // UART4 Rx 和 Tx
IntDefaultHandler、 // UART5 Rx 和 Tx
IntDefaultHandler、 // UART6 Rx 和 Tx
IntDefaultHandler、 // UART7 Rx 和 Tx
0、 //保留
0、 //保留
0、 //保留
0、 //保留
IntDefaultHandler、 // I2C2主设备和从设备
IntDefaultHandler、 // I2C3主设备和从设备
IntDefaultHandler、 //计时器4子计时器 A
IntDefaultHandler、 //计时器4子计时器 B
0、 //保留
0、 //保留
0、 //保留
0、 //保留
0、 //保留
0、 //保留
0、 //保留
0、 //保留
0、 //保留
0、 //保留
0、 //保留
0、 //保留
0、 //保留
0、 //保留
0、 //保留
0、 //保留
0、 //保留
0、 //保留
0、 //保留
0、 //保留
IntDefaultHandler、 //计时器5子计时器 A
IntDefaultHandler、 //计时器5子计时器 B
IntDefaultHandler、 //宽定时器0子定时器 A
IntDefaultHandler、 //宽定时器0子定时器 B
IntDefaultHandler、 //宽定时器1子定时器 A
IntDefaultHandler、 //宽定时器1子定时器 B
IntDefaultHandler、 //宽定时器2子定时器 A
IntDefaultHandler、 //宽定时器2子定时器 B
IntDefaultHandler、 //宽定时器3子定时器 A
IntDefaultHandler、 //宽定时器3子定时器 B
IntDefaultHandler、 //宽定时器4子定时器 A
IntDefaultHandler、 //宽定时器4子定时器 B
IntDefaultHandler、 //宽定时器5子定时器 A
IntDefaultHandler、 //宽定时器5子定时器 B
IntDefaultHandler、 // FPU
0、 //保留
0、 //保留
IntDefaultHandler、 // I2C4主设备和从设备
IntDefaultHandler、 // I2C5主设备和从设备
IntDefaultHandler、 // GPIO 端口 M
IntDefaultHandler、 // GPIO 端口 N
IntDefaultHandler、 //正交编码器2
0、 //保留
0、 //保留
IntDefaultHandler、 // GPIO 端口 P (摘要或 P0)
IntDefaultHandler、 // GPIO 端口 P1
IntDefaultHandler、 // GPIO 端口 P2
IntDefaultHandler、 // GPIO 端口 P3
IntDefaultHandler、 // GPIO 端口 P4
IntDefaultHandler、 // GPIO 端口 P5
IntDefaultHandler、 // GPIO 端口 P6
IntDefaultHandler、 // GPIO 端口 P7
IntDefaultHandler、 // GPIO 端口 Q (摘要或 Q0)
IntDefaultHandler、 // GPIO 端口 Q1
IntDefaultHandler、 // GPIO 端口 Q2
IntDefaultHandler、 // GPIO 端口 Q3
IntDefaultHandler、 // GPIO 端口 Q4
IntDefaultHandler、 // GPIO 端口 Q5
IntDefaultHandler、 // GPIO 端口 Q6
IntDefaultHandler、 // GPIO 端口 Q7
IntDefaultHandler、 // GPIO 端口 R
IntDefaultHandler、 // GPIO 端口 S
IntDefaultHandler、 // PWM 1发生器0
IntDefaultHandler、 // PWM 1发生器1
IntDefaultHandler、 // PWM 1发生器2
IntDefaultHandler、 // PWM 1发生器3
IntDefaultHandler // PWM 1故障
};
void
ResetISR (void)
{
_IAR_program_start();
}
静态空
NmiSR (void)
{
//
//输入无限循环。
//
while (1)
{
}
}
静态空
FaultISR (空)
{
//
//输入无限循环。
//
while (1)
{
}
}
静态空
IntDefaultHandler (void)
{
//
//进入无限循环。
//
while (1)
{
}
}
你好,Furkan!
也许我会有所帮助:
请看以下几行:
SysTickPeriodSet (系统时钟/1000); SysTickEnable(); SysTickIntEnable();
现在、我们来看看以下内容:
NVIC_ST_CTRL_R = 0; NVIC_ST_RELOAD_R =周期-1; NVIC_ST_CURRENT_R = 0; NVIC_SYS_PRI3_R =(NVIC_SYS_PRI3_R&0x00FFFFFF)|0x40000000; NVIC_ST_CTRL_R = 0x07;
想象一下、如果您从现在起一年后再看一下它们。 您可能已经忘记了 TivaWare API 的一些详细信息、但您认为可以理解和管理这两组代码中的哪一组? 哪一项将更快地得到解决? 想象一下、有些事情不太好、您可以相信哪一个能够被证明? 当您需要调试或在未来发展项目时、编码的清晰度非常重要。 这里的建议是:不要因寄存器配置模糊而浪费时间、而是使用驱动程序库。
现在、对于您的神秘硬故障、可能是由于堆栈太小? printf 系列会占用大量堆栈、2K 也不是一个坏的开始...
布鲁诺
[引用 user="Furkan Erman"]使用现成的库非常简单,每个人都可以使用它[/引用]
嗯... 我问过街对面餐厅的女服务员和我的律师。 两者似乎都无法使用库...
使用制造商的官方驱动程序库与某些社区创建的模糊的 vooduino 下载库之间存在主要差异。 如果寄存器位从0更改为1、则不会真正向您显示背景情况、除非您有 IC 内部电路的完整原理图。
谢谢
布鲁诺
好的、我按照您的建议使用了驱动程序库、但结果是相同的。 我怀疑我的定制板是否具有 proplem、但它在 Tm4c123gxl launchpad 上也不起作用。
main.c
//
//
// interrupts.c -中断抢占和尾链示例。
//
//版权所有(c) 2012-2013 Texas Instruments Incorporated。 保留所有权利。
//软件许可协议
//
//德州仪器(TI)提供此软件仅供
和//仅供 TI 的微控制器产品使用。 软件归
// TI 和/或其供应商所有,并受适用的版权
//法律保护。 您不能将此软件与"病毒"开源
//软件组合在一起以形成更大的程序。
//
//此软件按“原样”提供,且存在所有故障。
//对于
本软件,不作任何明示、暗示或法定的保证,包括但不限于对适销性和适用性的暗示保证//特定用途。 在任何
//情况下、TI 不对任何
原因造成的特殊、意外或必然//损害负责。
//
//这是 EK-TM4C123GXL 固件包修订版1.0的一部分。
////
*****************
#include
#include
include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_NVIC.h"
#include "Filename/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/ipt_intrinu.ide"
#include "driverlib_ipt_driverlib_pinc.h"#include "#driveript_intrine_pio.ide"#include "#driverlib_trin.ide"
、#def_ipt_ipt_infot.ipt_in.id_in_in_in_in.id_in_in.ide"#include "#include "#def"#def"#def_ipt_ipt_ipt_ipt_ipt_in.ipt_in.ipt_in.id_in.ipt_in.id_in_in_in.id_in.id_in_in_in.h #include #include #include "#include "#include "#def_in.ipt_ipt_in.
int
main (void)
{
//
//将时钟设置为直接从晶体运行。
//
SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHz);
//
//启用此示例使用的外设。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_1 | GPIO_PIN_2 |
GPIO_PIN_3);
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3、0);
//
//设置和启用 SysTick 计时器。 它将用作参考
//用于中断处理程序中的延迟循环。 SysTick 计时器周期
//将设置一秒钟。
//
SysTickPeriodSet (16000);
SysTickEnable();
SysTickIntEnable();
//
//启用到处理器的中断。
//
IntMasterEnable();
while (1)
{
}
}
startup.c
//
//
//// startup.c -与 IAR Embedded Workbench 一起使用的启动代码,
// 版本5。
//
//版权所有(c) 2012-2013 Texas Instruments Incorporated。 保留所有权利。
//软件许可协议
//
//德州仪器(TI)提供此软件仅供
和//仅供 TI 的微控制器产品使用。 软件归
// TI 和/或其供应商所有,并受适用的版权
//法律保护。 您不能将此软件与"病毒"开源
//软件组合在一起以形成更大的程序。
//
//此软件按“原样”提供,且存在所有故障。
//对于
本软件,不作任何明示、暗示或法定的保证,包括但不限于对适销性和适用性的暗示保证//特定用途。 在任何
//情况下、TI 不对任何
原因造成的特殊、意外或必然//损害负责。
//
//这是 EK-TM4C123GXL 固件包修订版1.0的一部分。
////
*****************
#include
#include "inc/hw_NVIC.h"
#include "inc/hw_types.h"
//*********
//
//为此源文件启用 IAR 扩展。
////
*****************
#pragma language=extended
//*********
//
//转发默认故障处理程序的声明。
////
*****************
void ResetISR (void);
static void NmiSR (void);
static void FaultISR (void);
static void IntDefaultHandler (void);
//*********
//
//应用程序使用的中断处理程序的外部声明。
////
*****************
extern void SysTick 处理程序(void);
//*************
//
//应用程序启动代码的入口点。
////
*****************
extern void __IAR_program_start (void);
//*********
//
//为系统堆栈保留空间。
////
*****************
静态 uint32_t pui32stack[128]@".noinit";
//*********
//
//描述向量表条目的联合体。 需要使用 union
//、因为第一个条目是栈指针、而余数是函数
//指针。
////
*****************
typedef union
{
void (* pfnHandler)(void);
uint32_t ui32Ptr;
}
uVectorEntry;
//*********
//
//矢量表。 请注意、必须在这个上放置适当的结构、以
//确保它在物理地址0x0000.0000处结束。
////
*****************
__root const uVectorEntry __vector_table[]@".intvec"=
{
{.ui32Ptr =(uint32_t) pui32Stack + sizeof (pui32Stack)}、
//初始堆栈指针
ResetISR、 //重置处理程序
NmiSR、 // NMI 处理程序
FaultISR、 //硬故障处理程序
IntDefaultHandler、 // MPU 故障处理程序
IntDefaultHandler、 //总线故障处理程序
IntDefaultHandler、 //用法故障处理程序
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 // SVCall 处理程序
IntDefaultHandler、 //调试监视器处理程序
IntDefaultHandler、 //保留
IntDefaultHandler、 // PendSV 处理程序
SysTick 处理程序、 // SysTick 处理程序
IntDefaultHandler、 // GPIO 端口 A
IntDefaultHandler、 // GPIO 端口 B
IntDefaultHandler、 // GPIO 端口 C
IntDefaultHandler、 // GPIO 端口 D
IntDefaultHandler、 // GPIO 端口 E
IntDefaultHandler、 // UART0 Rx 和 Tx
IntDefaultHandler、 // UART1 Rx 和 Tx
IntDefaultHandler、 // SSI0 Rx 和 Tx
IntDefaultHandler、 // I2C0主机和从机
IntDefaultHandler、 // PWM 故障
IntDefaultHandler、 // PWM 发生器0
IntDefaultHandler、 // PWM 发生器1
IntDefaultHandler、 // PWM 发生器2.
IntDefaultHandler、 //正交编码器0
IntDefaultHandler、 // ADC 序列0
IntDefaultHandler、 // ADC 序列1
IntDefaultHandler、 // ADC 序列2.
IntDefaultHandler、 // ADC 序列3.
IntDefaultHandler、 //看门狗计时器
IntDefaultHandler、 // Timer 0子计时器 A
IntDefaultHandler、 // Timer 0子计时器 B
IntDefaultHandler、 //计时器1子计时器 A
IntDefaultHandler、 //计时器1子计时器 B
IntDefaultHandler、 //计时器2子计时器 A
IntDefaultHandler、 //计时器2子计时器 B
IntDefaultHandler、 //模拟比较器0
IntDefaultHandler、 //模拟比较器1
IntDefaultHandler、 //模拟比较器2.
IntDefaultHandler、 //系统控制(PLL、OSC、BO)
IntDefaultHandler、 //闪存控制
IntDefaultHandler、 // GPIO 端口 F
IntDefaultHandler、 // GPIO 端口 G
IntDefaultHandler、 // GPIO 端口 H
IntDefaultHandler、 // UART2 Rx 和 Tx
IntDefaultHandler、 // SSI1 Rx 和 Tx
IntDefaultHandler、 //计时器3子计时器 A
IntDefaultHandler、 //计时器3子计时器 B
IntDefaultHandler、 // I2C1主设备和从设备
IntDefaultHandler、 //正交编码器1
IntDefaultHandler、 // CAN0
IntDefaultHandler、 // CAN1
IntDefaultHandler、 // CAN2
IntDefaultHandler、 //保留
IntDefaultHandler、 //休眠
IntDefaultHandler、 // USB0
IntDefaultHandler、 // PWM 发生器3.
IntDefaultHandler、 // uDMA 软件传输
IntDefaultHandler、 // uDMA 错误
IntDefaultHandler、 // ADC1序列0
IntDefaultHandler、 // ADC1序列1
IntDefaultHandler、 // ADC1序列2.
IntDefaultHandler、 // ADC1序列3.
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 // GPIO 端口 J
IntDefaultHandler、 // GPIO 端口 K
IntDefaultHandler、 // GPIO 端口 L
IntDefaultHandler、 // SSI2 Rx 和 Tx
IntDefaultHandler、 // SSI3 Rx 和 Tx
IntDefaultHandler、 // UART3 Rx 和 Tx
IntDefaultHandler、 // UART4 Rx 和 Tx
IntDefaultHandler、 // UART5 Rx 和 Tx
IntDefaultHandler、 // UART6 Rx 和 Tx
IntDefaultHandler、 // UART7 Rx 和 Tx
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 // I2C2主设备和从设备
IntDefaultHandler、 // I2C3主设备和从设备
IntDefaultHandler、 //计时器4子计时器 A
IntDefaultHandler、 //计时器4子计时器 B
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 //计时器5子计时器 A
IntDefaultHandler、 //计时器5子计时器 B
IntDefaultHandler、 //宽定时器0子定时器 A
IntDefaultHandler、 //宽定时器0子定时器 B
IntDefaultHandler、 //宽定时器1子定时器 A
IntDefaultHandler、 //宽定时器1子定时器 B
IntDefaultHandler、 //宽定时器2子定时器 A
IntDefaultHandler、 //宽定时器2子定时器 B
IntDefaultHandler、 //宽定时器3子定时器 A
IntDefaultHandler、 //宽定时器3子定时器 B
IntDefaultHandler、 //宽定时器4子定时器 A
IntDefaultHandler、 //宽定时器4子定时器 B
IntDefaultHandler、 //宽定时器5子定时器 A
IntDefaultHandler、 //宽定时器5子定时器 B
IntDefaultHandler、 // FPU
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 // I2C4主设备和从设备
IntDefaultHandler、 // I2C5主设备和从设备
IntDefaultHandler、 // GPIO 端口 M
IntDefaultHandler、 // GPIO 端口 N
IntDefaultHandler、 //正交编码器2
IntDefaultHandler、 //保留
IntDefaultHandler、 //保留
IntDefaultHandler、 // GPIO 端口 P (摘要或 P0)
IntDefaultHandler、 // GPIO 端口 P1
IntDefaultHandler、 // GPIO 端口 P2
IntDefaultHandler、 // GPIO 端口 P3
IntDefaultHandler、 // GPIO 端口 P4
IntDefaultHandler、 // GPIO 端口 P5
IntDefaultHandler、 // GPIO 端口 P6
IntDefaultHandler、 // GPIO 端口 P7
IntDefaultHandler、 // GPIO 端口 Q (摘要或 Q0)
IntDefaultHandler、 // GPIO 端口 Q1
IntDefaultHandler、 // GPIO 端口 Q2
IntDefaultHandler、 // GPIO 端口 Q3
IntDefaultHandler、 // GPIO 端口 Q4
IntDefaultHandler、 // GPIO 端口 Q5
IntDefaultHandler、 // GPIO 端口 Q6
IntDefaultHandler、 // GPIO 端口 Q7
IntDefaultHandler、 // GPIO 端口 R
IntDefaultHandler、 // GPIO 端口 S
IntDefaultHandler、 // PWM 1发生器0
IntDefaultHandler、 // PWM 1发生器1
IntDefaultHandler、 // PWM 1发生器2
IntDefaultHandler、 // PWM 1发生器3
IntDefaultHandler // PWM 1故障
};
//*********
//
//这是在处理器首次开始执行
时调用的代码//在复位事件之后。 只执行绝对必要的设置,
//之后调用应用程序提供的 entry()例程。 任何花式
//操作(例如根据复位原因寄存
器做出决策、和//复位该寄存器中的位)都只能由//应用程序控制。
////
*****************
void
ResetISR (void)
{
//
//启用浮点单元。 必须在此处执行此操作才能处理
// main()使用浮点且函数 prologueue 保存的情况
//浮点寄存器(如果浮点不是浮点、则会出现故障
//启用)。 使用 DriverLib 的浮点单元的任何配置
//必须在启用浮点单元之前在此处完成 API。
//
//请注意,这不使用 DriverLib,因为它可能未包含在中
//此项目。
//
HWREG (NVIC_CPAC)=((HWREG (NVIC_CPAC)&
~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)|
NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL);
//
//调用应用程序的入口点。
//
__IAR_program_start();
}//*************
//
//这是当处理器接收到 NMI 时被调用的代码。 这个
//只需进入一个无限循环,保留系统状态供
调试器检查//。
////
*****************
静态空
NmiSR (void)
{
//
//输入无限循环。
//
while (1)
{
}
}
//*********
//
//这是处理器收到故障
//中断时调用的代码。 这只是进入一个无限循环、保持系统状态
//供调试器检查。
////
*****************
静态空
FaultISR (空)
{
//
//输入无限循环。
//
while (1)
{
}
}
//*********
//
//这是当处理器收到意外
的//中断时调用的代码。 这只是进入一个无限循环、保持系统状态
//供调试器检查。
////
*****************
静态空
IntDefaultHandler (void)
{
//
//进入无限循环。
//
while (1)
{
}
}
Hallo Erman、
阅读更简单(至少对我来说)!
1) 1) SysTick 部件完美、它应该可以正常工作。 如果您在 SysTick ISR 内设置断点、程序是否会到达该断点?
2) 2)下一行不会打开所有引脚。 第三个参数应该是包含您要激活的引脚的掩码-在这种情况下、值1将只屏蔽到 PIN_0:
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3、1);
3) 3)我研究了系统时钟已经有一段时间了、现在我们只需复制/粘贴已经在这里工作的内容。 在本例中、我们使用 PLL、80MHz 的设置如下:
SysCtlClockSet (SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz | SYSCTL_OSC_MAIN);
关于主题:我没有发现运行 MCU 的速度比它慢的原因(个人意见)。 我想、如果目标是节省能源、那么尽快完成任务并在可能的情况下睡眠会更高效。 请注意、在这种情况下、您必须更改 SysTick 参数以使其恢复到1000Hz。
布鲁诺
问题得到解决、现在我有了正常工作的 SysTick 中断。 如果有人想使用、则下面是最终代码。 感谢@öm SourceTwo、@ö m Robert Adsett和@Bruno Saraiva。
#include
#include
#include
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_NVIC.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/ipt_dive_dive"#include
"driverlib_dive/ipt_out.ide"
#driveript_unch_ude_dive.ide"
#include "#driverlib_dive/ipt_id.ide"#include "#driveript_une.t_unt #include "#def_intrl"#def_idive"#id_id_ide.t_in.ide"#include "#ide"#/ipt_in.ide"#idr.idr.idr.idr.ide"#idr.idr.idr.idr.idr.idr.idr.ide"#include "#/ipt_u.idr.idr.idr.idr.idr.idr.id_
if (count == 500){
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3、14);
}
否则(计数= 1000){
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3、0);
count=0;
}
}
int
main (void)
{
volatile uint32_t ui32Loop;
//
//将时钟设置为直接从晶体运行。
//
// SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);
SysCtlClockSet (SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHz);
//
//启用此示例使用的外设。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3、0);
//
//设置和启用 SysTick 计时器。 它将用作参考
//用于中断处理程序中的延迟循环。 SysTick 计时器周期
//将设置一秒钟。
//
SysTickPeriodSet (80000);
SysTickEnable();
SysTickIntEnable();
//
//启用到处理器的中断。
//
// IntMasterEnable();
while (1)
{
}
}
这里有人(尤其是快打的员工)是否不同意?
考虑一下寻找所有端口引脚的情况-员工会"割伤手腕"、而不是花"无限小时"列出 GPIO_PIN_无穷 大! (在这种情况下、0xFF 工作正常-并且"注释字段"可能会将该值记录为"基于位位置"-克服"奇迹!"
(请注意、注释字段被 GPIO_AD_infinitum 过度运行-不是吗?)
而且-通常情况下、其他端口必须得到类似的处理-使用"GPIO_PIN_AD_infinitum"变得非常旧-非常快!
哦罗伯特——前一天你"泄露"黑客秘密——现在你"和布鲁诺站在一边!"
(预期)血液路径-来自(多个)狭腕-一定要破坏我们的 ESD 安全、高科技(昂贵)地板...
至少我们的海报显示了"见光"-但使用十六进制值( 两个) Params:2和3、表现得更强(甚至更强)。 (在 Params 2和3的"和"之后产生"1"的端口位-"打开"其输出。)
虽然我不是"共谋辩护律师"、但必须注意的是、"布鲁诺的"木匠隧道专家"名单(刚刚)在安大略省的整洁位置添加了几位专家! (当然是偶然的-我们确信...)