主题中讨论的其他器件: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 寄存器进行了调试、它正在更新该值、因此我想知道我在代码中会产生什么错误?