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.

[参考译文] LAUNCHXL-F28379D:设置 Timer0中断

Guru**** 2524550 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/966616/launchxl-f28379d-setting-timer0-interrupt

器件型号:LAUNCHXL-F28379D
主题中讨论的其他器件:C2000WARE

大家好、我正在尝试启动一个板、我想先启动计时器0中断。 我将浏览数据表并按照说明进行操作、但不会调用我的中断。

#include 
#include "interrupts.h"

#include "F28379D 器件支持/include/F2837xD_device.h"
#include "F28379D 器件支持/include/F2837xD_PIECTRL.h"
#include "F28379D 器件支持/include/F2837xD_pioevect.h"



main (void)


Dint;
EALLOW;

/*设置系统时钟@1MHz,INTOSC2*/
如果(!ClkCfgRegs.MCDCR.bit.MCLKSTS){
WdRegs.SCSR.bit.WDOVERRIDE = 1;//启用 WD 编辑
WdRegs.WDCR.bit.WDDIS = 1;//禁用 WD
ClkCfgRegs.CLKSRCCTL1.bit.OSCCLKSRCSEL = 0x0;//INTOSC2作为时钟源
asm (" RPT #10 || NOP");//等待10个时钟周期
ClkCfgRegs.SYSPLLCTL1.bit.PLLCLKEN = 0;//绕过 PLL
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV = 0;//将系统时钟分频器设置为/1
ClkCfgRegs.SYSPLLMULT.ALL = 0x01;//Mult 为1、这将启动 PLL
while (!ClkCfgRegs.SYSPLLSTS.bit.lock);//等待 PLL 未锁定
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV = 11;//将分频器设置为10
WdRegs.WDCR.bit.WDDIS = 0;//启用 WD、使其复位 CPU
DevCfgRegs.SYSDBGCTL.bit.bit_0 = 1;
ClkCfgRegs.SYSPLLCTL1.bit.PLLCLKEN = 0;//将 PLL 设置为系统时钟
DevCfgRegs.SYSDBGCTL.bit.bit_0 = 0;
WdRegs.WDCR.bit.WDDIS = 1;//禁用 WD
} 否则{
ESTOP0;
while (1);
}
/*================================================ *

/*在 PIE*/中启用 Timer0中断
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//启用 PIE
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;//将位设置为1.7中断
IER |= 1;
uint16_t* timer0_isr_p = 0x00000D4C;
*timer0_ISR_p =&tim0_ISR;
PieCtrlRegs.PIEACX.ALL = 0xFFFF;
/*======================================== *

/*将 Timer0配置为1ms 中断*/
CpuTimer0Regs.TPR.bit.TDDR = 10 - 1;//预分频至100KHz
CpuTimer0Regs.PRD.All = 100;//进一步预分频至1KHz
CpuTimer0Regs.TCR.bit.TSS = 1;//停止 timer0
CpuTimer0Regs.TIM.all = 100;//加载 PRD 值的定时器
CpuTimer0Regs.tcr.bit.tie = 1;//启用中断
CpuTimer0Regs.TCR.bit.TSS = 0;//启动 timer0
/*================================================ *

/*为测试目的配置 GPIO */
/*================================================ *



EINT;
EDIS;



while (1)
{

}
} 

这是我的 main.c 代码。

#include "interrupts.h"
#include "stdio.h"

中断 void tim0_ISR (void){
printf ("Hello");
}

这是我的 interrupts.c 代码

我已经检查了存储器位置 0x00000D4C、在那里写入的 tim0_ISR 似乎没有问题。 我已经对 timer0 TIM 寄存器进行了调试、它正在更新该值、因此我想知道我在代码中会产生什么错误?

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

    您好、Aleksandar、

    C2000ware SDK 随附一个有关 CPU 计时器的示例。 您可以尝试一下该示例、看看它是否适合您? 它位于:

    C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f2837xd/examples/cpu1/cpu_timers

    示例工作后、您可以在设置中遵循相同的 CPU 计时器配置序列。

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

    我可以在 C2000中尝试示例、但我还想知道我发布的代码为什么不起作用、而不仅仅是复制粘贴代码。

    感谢您的回复。

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

    由于美国的假期、大多数人都不在办公室、将在1月5日或6日返回办公室。 如果您先运行示例代码、然后再从该代码进行调试、则效率会更高。

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

    您好、Aleksandar、

    您是否能够解决问题或仍需要帮助?

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

    由于缺少活动而关闭线程。 如果仍有问题、请随时打开新的线程或重新打开该线程。