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.

[参考译文] TMS320F28388D:如何对基于中断的计时器程序进行编程以切换 LED

Guru**** 2933740 points

Other Parts Discussed in Thread: TMDSHSECDOCK, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/868520/tms320f28388d-how-to-program-a-interrupt-based-timer-program-to-toggle-the-led

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

控制器-TMS320F28388D

集线站- TMDSHSECDOCK

PLZ 告诉我用于制作基于中断的计时器程序的编程代码、以每1/2秒切换一次 LED

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

    您好、Abhishek、

    您是否看过 C2000WARE 中的示例

    有一个 LED 示例(C:\ti\c2000\C2000Ware_x\device_support\f2838x\examples\cPU1\led)和一个执行计时器中断的示例(C:\ti\c2000Ware_x\device_support\f2838x\examples\cPU1\timer)

    这两个示例可以与执行所需操作的细微修改结合在一起。

    此致、

    Marlyn

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

    HII Marlyn、

    这是我从库中获得的计时器代码。我了解 LED 的代码、但没有计时器代码、这就是为什么不能合并这两个代码来进行程序的原因。 您能不能直接帮助我处理这段代码、或者如果您能告诉我如何合并这两个代码、会更好。。。。。提前感谢

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

    您好、Abhishek、

    要了解如何正确配置中断、请参阅技术参考手册的"外设中断"部分。

    计时器的所有配置都可以保持不变,期望将周期从一秒更改为1/2秒;这在 ConfigCpuTimer()函数中发生了变化。 确保也在 main()中添加 GPIO 引脚的配置。

     每隔0.5秒就会发生一次中断。 在中断服务例程(ISR)中 、您可以更改 LED 的状态(我标记了以下位置)。 我建议只需切换 LED 值、这样每当 ISR 执行 LED 的状态时、LED 的状态就会改变。

    请告诉我这是否仍然不清楚、或者您有任何具体问题、我很乐意帮助您解决。

    //您可能只需要一个计时器中断,所以我保留了计时器0
    
    //
    ////函数原型-这声明将用于中断
    的函数//
    __interrupt void cpuTimer0ISR (void);
    
    
    //
    // Main
    //
    void main (void)
    {
    //
    //初始化设备时钟和外设
    //
    InitSysCtrl();
    
    //
    //禁用 CPU 中断
    //
    Dint;
    
    //
    //将 PIE 控制寄存器初始化为默认状态。
    //默认状态为禁用所有 PIE 中断和标志
    //被清除。
    //
    InitPieCtrl();
    
    //
    //禁用 CPU 中断并清除所有 CPU 中断标志
    //
    IER = 0x0000;
    IFR = 0x0000;
    
    //
    //使用指向 shell 中断的指针初始化 PIE 矢量表
    //服务例程(ISR)
    //
    InitPieVectTable();
    
    //
    //映射 ISR 函数
    //
    EALLOW;
    PieVectTable.TIMER0_INT =&cpuTimer0ISR;
    EDIS;
    
    //Initialize/Configure 此处是 GPIO 引脚
    
    //
    //初始化设备外设。 对于本示例、仅初始化
    // CPU 定时器。
    //
    InitCpuTimer();
    
    //
    //将 CPU 定时器0配置为每1/2秒中断一次:
    // 200MHz:CPU 频率、周期:以 μ 秒为单位)
    //
    ConfigCpuTimer (&CpuTimer0、200、50000);
    
    //
    //为了确保精确的时序,请使用只写指令来写入
    //整个寄存器。 因此、如果任何配置位发生更改
    //在 ConfigCpuTimer 和 InitCpuTimers 中,还必须进行以下设置
    //更新。
    //
    CpuTimer0Regs.TCR.ALL = 0x4000;
    
    //
    //启用连接到 CPU 定时器0的 CPU INT1
    //
    IER |= M_INT1;
    
    //
    //在 PIE 中启用 TINT0:组1中断7
    //
    PieCtrlRegs.PIEIER1.bit.INTx7=1;
    
    //
    //启用全局中断和更高优先级的实时调试事件
    //
    EINT;
    ERTM;
    
    //
    //空闲循环。 只需坐下来循环(可选)。
    //
    while (1)
    {
    
    }
    }
    
    //
    // cpuTimer0ISR -具有中断计数器
    的 CPU Timer0 ISR //
    __interrupt void cpuTimer0ISR (void)
    {
    //在此处切换 LED 的值
    
    //
    //确认此中断以从组1接收更多中断
    //
    PieCtrlRegs.PIEACK.all = PIEACK_Group1;
    }
    
    //
    //文件结束
    // 

    此致、

    Marlyn