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.

[参考译文] EK-TM4C1294XL:计时器基本问题

Guru**** 2322270 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/587799/ek-tm4c1294xl-timer-basic-problem

器件型号:EK-TM4C1294XL

大家好。 我是 EK-TM4C1294 XL 电路板的新计划。 我学习的内容是"工作手册 TM4C1294.pdf"。 我想使用具有中断功能的计时器来生成精确时间。 但是、当我运行程序时、CPU 不能跳转到计时器中断服务 Roundtie。 我的代码如下。 我使用的 IAR IDE 的预处理器参数是  

"ewarm"和 "target_IS_TM4C129_RA0"

#include 
#include 
#include "driverlib/inc/hw_memmap.h"
#include "driverlib/inc/hw_types.h"
#include "driverlib/inc/hw_NVIC.h"
#include "driverlib/sys/hw_ints.h"
#include "driverlib/debug.h"
#include "driverlib/driverlib"#driverlib_rom.idt#include
"#driverlib_timers/driverlib"#driverlib_timers.idt#include "#driverlib_intradc/ides.h"



#include "driverlib_timers.idt.ides#include "driverlib_ins/idt.idt.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr










int main (void)
{
//使用外部时钟和 PLL 配置系统时钟*/
sys_clock_Hz = map_SysCtlClockFreqSet (SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480、
120000000);

SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);

/*将 led 配置为输出*/
GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0);

//将计时器配置为100mS 周期*/
TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIOD);
TimerSet (TIMER0_BASE、TIMER_A、(SYS_CLOCK、TIMER10_CLISR_PERIOR)
;TIMER10_TIMER1)


TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
IntEnable (INT_TIMER0A);
TimerEnable (TIMER0_BASE、TIMER_A);
IntMasterEnable();

/*无限循环*/
while (1)
{

}


void Timer_ISR (void)
{
//清除计时器中断*/
TimerIntClear (TIMER0_BASE、TIMER_TIMA_TIMEOUT);

if (GPIOPinRead (GPIO_PORTN_BASE、GPIO_PIN_0))
{ GPIOPIN_BASE
(GPIOP0_PHIN_TO_TIMEOUT



)};GPIOP0_PHIN (0xORTN_PIN_PHIN)};GPIOP0_PIN_PIN_PIN_PHIN 0_PIN_PHIN)


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请帮我!!!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您是否已将文件 startup_ewarm.c 添加到您的项目并对其进行了修改? 您应该首先将定时器中断例程的名称添加为一个外部声明、然后修改 中断矢量数组中定时器中断例程的名称。

    如果不更改中断矢量数组中的名称、仅注册(如您所做的那样)是无用的。 (您可以跳过此指令、只需修改即可)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。 我会尝试这种方法。 祝你度过美好的一天!!!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    由于您已明确努力了解和部署 MCU 的计时器-这是(过去、现在)代码。 (在 StellarisWare 下)

    这一切都遵循了朋友 Petrei 的良好指示-这是在 IAR 下编写的代码(也是)。  (代码尝试"说明并详细说明"提供的指南 Petrei。)

    1) 1)他指示您将(特定)定时器矢量添加 EWARM 启动文件: (为您进行了说明-如下所示)

    //应用程序使用的中断处理程序的外部声明。
    //
    extern void Timer1BIntHandler (void);  // Tak 500US   注意:这将取代"注册中断"的需要-证明更快速、更轻松!

    2) 2) 您必须在 EWARM 启动"矢量表"中"输入"此中断。  (在"EWARM 启动文件"中找到)

    IntDefaultHandler、                        //计时器1子计时器 A  (这是标准(默认)处理程序
    Timer1BIntHandler、                      // Timer 1子计时器 B  (我已经命名这个-"匹配"您的"外部声明"(上面)

    3) 3) 以下是该计时器的(示例)配置代码:

    // Timer_1B 初始化- 16 b (Tak 输出)... 通过 PD4)

    ROM_TimerDisable (Timer1_base、timer_B);

    ROM_TimerConfigure (Timer1_base、TIMER_CFG_SPLIT_PAIR | TIMER_CFG_B_ONE_SHOT);

    ROM_TimerLoadSet (Timer1_base、timer_B、25000);// 500uS

    ROM_TimerIntEnable (Timer1_base、TIMER_TIMB_TIMEOUT);

    ROM_IntEnable (INT_TIMER1B);

    4)、这里是中断服务例程:

    //处理 T1_B 中断// Tak 计时器
    //
    无效
    Timer1BIntHandler (空)


    ROM_TimerIntClear (Timer1_base、timer_TIMB_TIMEOUT);

    GPIO_PORTD_DATA_R &=~0x10;// PD4 Lo Tak OUT

    ROM_TimerDisable (Timer1_base、timer_B);