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.

[参考译文] TMS320F28377S:中断问题

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1327355/tms320f28377s-issue-with-the-interrupt

器件型号:TMS320F28377S
主题中讨论的其他器件:C2000WARE

尊敬的专家:

我正在尝试初始化计时器和系统初始化。 我使 GPIO 开启和关闭了。 但是、我无法使用计时器和中断完成相同的任务、但是没有出现错误。 请参阅随附代码中的问题。 除此之外、我想知道此程序是否在200MHz 上已将微控制器注释掉。

#include "F28x_Project.h"

interrupt void timer_ovf_isr(void);

extern void InitSysCtrl(void);



void TimerInit();
void GpioInit();

int a =0;

void main(void)

{
     InitSysCtrl();
     TimerInit();
     GpioInit();
     DINT;
     InitPieCtrl();
     InitPieVectTable();
     EALLOW;


     EALLOW;
     PieVectTable.TIMER0_INT = &timer_ovf_isr;
     EDIS;

     PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
     PieCtrlRegs.PIECTRL.bit.ENPIE = 1;

     IER |= 0x0001;

     EINT;          // Enable Global interrupt INTM
     ERTM;          // Enable Global realtime interrupt DBGM

     CpuTimer0Regs.TCR.bit.TSS = 0;
     while(1)
     {
             //idle
     }

}

void GpioInit(void)
{
     GpioCtrlRegs.GPAGMUX1.bit.GPIO13 = 0;
     GpioCtrlRegs.GPADIR.bit.GPIO13 = 1;
     GpioCtrlRegs.GPADIR.bit.GPIO12 = 1;
}
void TimerInit(void)
{
     CpuTimer0Regs.PRD.bit.LSW = 0x02FF;
     CpuTimer0Regs.PRD.bit.MSW = 0x002F;
     CpuTimer0Regs.TPR.bit.TDDR = 0x001F;
     CpuTimer0Regs.TCR.bit.TIE = 1;
     CpuTimer0Regs.TCR.bit.TRB = 0;
     CpuTimer0Regs.TCR.bit.TSS = 1;
     CpuTimer0Regs.TCR.bit.FREE = 0;
}

void timer_ovf_isr(void)
{

     GpioDataRegs.GPATOGGLE.bit.GPIO13 = 1;
     GpioDataRegs.GPATOGGLE.bit.GPIO12 = 1;
     CpuTimer0Regs.TCR.bit.TIF = 1;
     PieCtrlRegs.PIEIFR1.bit.INTx7 = 0;
     PieCtrlRegs.PIEACK.all = 0x0001;

}

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

    Beesetty、您好!

    但是,我无法使用计时器和中断完成相同的任务,但没有错误。

    您如何确认这一点? ISR 是否完全未被命中? 您是否 已经从 C2000Ware 中遵循了 time_leed_blink_cpu01示例? 根据代码、看起来您正在使用一个分频值、这会增加计时器周期的长度。 请验证您是否可以首先让示例正常工作、这样您就有了已知的工作起点。

    Unknown 说:
    除此之外、我想知道该程序是否将200MHz 上的微控制器注释掉。

    默认情况下、我认为是的。

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

    尊敬的 Omer:

    正在调用 ISR、I 通过递增变量构成(未在该代码中显示)、但未进行 GPIO 切换。 我的确操作了比 C2000ware 提供的更基本的代码。 这个程序只是为了打开和关闭一个 LED、它是有效的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ISR 正在被调用,并且我通过递增变量(未在该代码中显示)而编译,但未发生 GPIO 切换。 我的确操作了比 C2000ware 提供的更基本的代码。 该程序只是打开和关闭一个指示灯,它可以工作。[/报价]

    我注意到您没有重新加载计时器(您使用 CpuTimer0Regs.tcr.bit.TRB = 0;)、这是否有意为之? 您应该重新加载它才能启动它、C2000Ware 示例会调用计时器配置函数、该函数会执行必要的步骤、以防您需要与某个东西进行比较。 请尝试使用针对您所需的 GPIO 引脚修改的此示例并验证其功能。 在您完成测试后告诉我。