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.

[参考译文] CCS/TMS320F280049:Timer0中断/LED 示例项目-问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/673208/ccs-tms320f280049-timer0-interrupt-led-example-projects---issues

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

工具/软件:Code Composer Studio

大家好、

我有一个用于 TMS320F280049微控制器的定制板、原理图附在这个线程上。 我将示例项目与支持新微控制器的 C200ware 结合使用。 头文件看起来是与开发板或其他器件一起使用的。  

我已经根据"F28004x_dev_user_guide.pdf"尝试了中断项目 LED 项目。 但是、这些工程会编译和加载、但调试器不会显示任何内容。 例如、定时器(计数器)不会递增。 是否有任何人拥有一个空白项目或具有所有通用器件头文件的 PWM 或计时器项目。 有什么想法吗?

//########################################################################################################################
//
//文件:timer_ex1_cputimers.c
//
//标题:CPU 定时器示例
//
//! addtogroup bitfield_example_list
//!

CPU 定时器


//!
//! 此示例配置 CPU Timer0、1和2并递增
//! 每次定时器发出中断时计数器。
//!
//! b 外部连接\n
//! -无
//!
//! b 监视\b 变量\n
//! - CpuTimer0.InterruptCount
//! - CpuTimer1.InterruptCount
//! - CpuTimer2.InterruptCount
//!
//
//########################################################################################################################
//$TI 发行版:F28004x 支持库 v1.03.00.00 $
//$Release Date:Thu Deco 7 18:46:47 CST 2017 $
//版权所有:
//版权所有(C) 2017 Texas Instruments Incorporated - http://www.ti.com/
//
//以源代码和二进制形式重新分发和使用,有无
//如果满足以下条件,则允许进行修改
//满足:
//
//重新分发源代码必须保留上述版权
//注意、此条件列表和以下免责声明。
//
//二进制形式的重新分发必须复制上述版权
//注意、中的条件列表和以下免责声明
//随提供的文档和/或其他材料
//分布。
//
//德州仪器公司的名称和的名称都不是
//其贡献者可用于认可或推广衍生产品
//未经特定的事先书面许可,从该软件下载。
//
//本软件由版权所有者和作者提供
//“原样”以及任何明示或暗示的保证,包括但不包括
//限于对适销性和适用性的暗示保证
//一个特定的目的是免责的。 在任何情况下、版权均不得
//所有者或贡献者应对任何直接、间接、偶然、
//特殊、典型或必然的损害(包括但不包括)
//仅限于采购替代货物或服务;
//数据或利润;或业务中断)
//责任理论,无论是合同责任、严格责任还是侵权行为
//(包括疏忽或其他)以任何方式因使用而产生
//此软件,即使已被告知可能会发生此类损坏。
//$
//########################################################################################################################

//
//包含的文件
//
#include "F28x_Project.h"

//
//函数原型
//
_interrupt void cpuTimer0ISR (void);
_interrupt void cpuTimer1ISR (void);
_interrupt void cpuTimer2ISR (void);

//
//主函
//
void main (void)

//
//初始化设备时钟和外设
//
InitSysCtrl();

//
//初始化 GPIO
//
InitGpio();
//GPIO_SetupPinMux (31U、GPIO_MUX_CPU1、0);
//GPIO_SetupPinOptions (31U、GPIO_OUTPUT、GPIO_PushPull);

//
//禁用 CPU 中断
//
Dint;

//
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//
InitPieCtrl();

//
//禁用 CPU 中断并清除所有 CPU 中断标志
//
IER = 0x0000;
IFR = 0x0000;

//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)
//
InitPieVectTable();

//
//映射 ISR 函数
//
EALLOW;
PieVectTable.TIMER0_INT =&cpuTimer0ISR;
PieVectTable.Timer1_INT =&cpuTimer1ISR;
PieVectTable.TIMER2_INT =&cpuTimer2ISR;
EDIS;

//
//初始化设备外设。 对于本示例、仅初始化
// CPU 定时器。
//
InitCpuTimer();

//
//将 CPU 定时器0、1和2配置为每秒中断一次:
// 100MHz CPU 频率,1秒周期(以 μ 秒为单位)
//
ConfigCpuTimer (&CpuTimer0、100、1000000);
ConfigCpuTimer (&CpuTimer1、100、1000000);
ConfigCpuTimer (&CpuTimer2、100、1000000);

//
//为了确保精确的时序,请使用只写指令来写入
//整个寄存器。 因此、如果任何配置位发生更改
//在 ConfigCpuTimer 和 InitCpuTimers 中,还必须进行以下设置
//更新。
//
CpuTimer0Regs.TCR.ALL = 0x4000;
CpuTimer1Regs.TCR.ALL = 0x4000;
CpuTimer2Regs.TCR.ALL = 0x4000;

//
//启用连接到 CPU 定时器0、CPU INT13的 CPU INT1
//连接到 CPU 定时器1,CPU int 14连接
//到 CPU 定时器2
//
IER |= M_INT1;
IER |= M_INT13;
IER |= M_INT14;

//
//在 PIE 中启用 TINT0:组1中断7
//
PieCtrlRegs.PIEIER1.bit.INTx7=1;

//
//启用全局中断和更高优先级的实时调试事件
//
EINT;
ERTM;

//
//空闲循环。 只需坐下来循环(可选)。
//
while (1)


//
// cpuTimer0ISR -具有中断计数器的 CPU Timer0 ISR
//
_interrupt void cpuTimer0ISR (void)

CpuTimer0.InterruptCount++;

//
//确认此中断以从组1接收更多中断
//
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;

//
// cpuTimer1ISR -具有中断计数器的 CPU Timer1 ISR
//
_interrupt void cpuTimer1ISR (void)

//
// CPU 确认中断
//
CpuTimer1.InterruptCount++;

//
//带有中断计数器的 cpuTimer2ISR CPU Timer2 ISR
//
_interrupt void cpuTimer2ISR (void)

//
// CPU 确认中断
//
CpuTimer2.InterruptCount++;

//
//文件结束
//

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    注:代码停留在"InitSysCtrl();"
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    穆罕默德

    这些示例和一些示例接头通常是为了与特定的开发板保持一致而创建的。 默认情况下、基本 c2000ware 示例的可能设计为开箱即用在 controlCARD 上。 这使用 X1/X2上的2引脚20MHz 晶体作为 PLL 的源。

    InitSysPLL 将期望连接晶体、如果不连接、我认为它可能会挂起、因为没有内置超时。

    您的定制板似乎没有外部 XTAL。 因此、您可能需要修改 InitSysCtl 函数以将 INTOSC 用作 PLL 的源代码。

    我对您的原理图还有其他几点意见:
    1.您没有为 VDDA 提供电压源? 这是器件上的3.3V 电源轨、为器件的模拟域供电。 我看不到它连接到3.3V 电源。 如果未通电、器件的模拟部分将不会运行。
    VREFLO 相对于模拟域浮动。 您应该使用一个基准来驱动这个引脚、或者它应该被接地。

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

    Mark、您好!  

    非常感谢您的耐心等待。 您的评论非常有用。 我已成功更改"f28004x_sysctrl.c"文件中的以下行;

    //InitSysPll (XTAL_OSC、IMULT_10、FULT_0、PLLCLK_by_2);

    InitSysPll (INT_OSC1、IMULT_10、FULT_0、PLLCLK_by_2);

    微控制器现在可以做一些事情:)! 但是、它不会像我预期的那样刷写代码(我将在上面布置另一个线程)。  

    我更新了另一个版本的原理图、如所附的新图片所示。 我突出显示了 VDDA 器件、我不确定 VREFLO 的接地。 请告诉我原理图中的分辨率是否可以解决问题。

    谢谢、

    穆罕默德

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

    为什么在3.3V 和 VDDA 之间放置两个电阻器? 它可以像您的 VDDIO 那样直接连接。 如果您担心来自数字域的噪声、则可以考虑在3.3V "VDD"电源轨之间放置铁氧体磁珠(我建议在该器件上将"VDDIO"重命名为"VDD"、通常指1.2V VDD 电源。 VDDIO 指的是3.3V。这只是我希望消除任何混淆)。

    也请检查每个电源引脚的去耦电容值。 您可以在数据表的引脚说明表中找到此信息。

    VREFLO 可直接接地。

    您可以参阅 F280049M controlCARD 原理图、以了解应如何连接电源引脚和其他器件支持引脚。

    谢谢、
    标记
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Mark 太棒了!
    感谢您再次回复。 它们仅是空间支架(零欧姆电阻器)。 这是一种新设计、在原理图完成时、没有任何可用的参考文档。
    是否有适用于此特定微控制器的通用文档或 C2000Ware? 所有代码都是针对控制卡制定的。
    再次感谢!
    穆罕默德
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    穆罕默德

    我很高兴能够提供帮助! 您目前最好的硬件参考是 controlCARD。

    对于任何软件、C2000ware 都是正确的选择。 这些示例旨在能够在 controlCARD 上运行、以便购买和使用我们的工具的用户轻松使用。 通常、仅当电路板设计和参考设计之间存在任何差异时、才需要修改引脚分配和时钟源。 这些示例旨在帮助您起步、如果您在定制硬件上运行、则需要对软件进行修改。

    标记