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.

[参考译文] TMS320F28020:CPUTimers 问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/812858/tms320f28020-issue-with-cputimers

器件型号:TMS320F28020

您好!

 在 TMS320F28020控制器中配置 CPU 计时器时、我会得到一个奇怪的观察结果。 我对计时器进行了以下配置。但配置完成后 、我只能启动 CPUTimer0而不能启动 CPUtimer1。

诊断后、我发现了这一点。  我是获得值"40000" TIM0PeriodValue 变量、还是在 TIM1PeriodValue 中获得值"0"。  我也尝试使用不同的周期值、但我始终在 "CpuTimer1Regs.PRD.All"寄存器中获得"0"值

long TIM1PeriodValue、TIM1PeriodValue =0;

InitCpuTimer();

ConfigCpuTimer (&CpuTimer0、40、1000);

ConfigCpuTimer (&CpuTimer1、40、1000);

TIM1PeriodValue = CpuTimer1Regs.PRD.all;

TIM0PeriodValue = CpuTimer0Regs.PRD.all;

CpuTimer0Regs.TCR.ALL = 0x4001; //开始计时器

CpuTimer1Regs.TCR.ALL = 0x4001; //开始计时器

 

谁能帮助我,为什么我不能修改 “CpuTimer1Regs.PRD.all”,或者配置中缺少一些东西。

空 InitCpuTimer()

   EALLOW;
   // CPU 定时器0
   //初始化指向相应定时器寄存器的地址指针:
   CpuTimer0.RegsAddr =&CpuTimer0Regs;
   //将定时器周期初始化为最大值:
   CpuTimer0Regs.PRD.All = 0xFFFFFFFF;
   //初始化预分频计数器以进行1分频(SYSCLKOUT):
   CpuTimer0Regs.TPR.ALL = 0;
   CpuTimer0Regs.TPRH 全部= 0;
   //确保计时器已停止:
   CpuTimer0Regs.TCR.bit.TSS = 1;
   //使用句点值重新加载所有计数器寄存器:
   CpuTimer0Regs.TCR.bit.TRB = 1;
   //复位中断计数器:
   CpuTimer0.InterruptCount = 0;


    CpuTimer1.RegsAddr =&CpuTimer1Regs;
//   CpuTimer2.RegsAddr =&CpuTimer2Regs;
   //将定时器周期初始化为最大值:
   CpuTimer1Regs.PRD.All = 0xFFFFFFFF;
//   CpuTimer2Regs.PRD.All = 0xFFFFFFFF;
   //初始化预分频计数器以进行1分频(SYSCLKOUT):
   CpuTimer1Regs.TPR.all = 0;
   CpuTimer1Regs.TPRH 全部= 0;
//   CpuTimer2Regs.TPR.all = 0;
//   CpuTimer2Regs.TPRH.ALL = 0;
   //确保停止计时器:
   CpuTimer1Regs.TCR.bit.TSS = 1;
//   CpuTimer2Regs.TCR.bit.TSS = 1;
   //使用句点值重新加载所有计数器寄存器:
   CpuTimer1Regs.TCR.bit.TRB = 1;
//   CpuTimer2Regs.tcr.bit.TRB = 1;
   //复位中断计数器:
   CpuTimer1.InterruptCount = 0;
//   CpuTimer2.InterruptCount = 0;

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

    您好、BIpin、

    理想情况下、您将在 ConfigCpuTimer 中配置 PRD 并立即读回它。 不会出现问题。

    您能否更改读取和查看的顺序?

    TIM0PeriodValue = CpuTimer0Regs.PRD.all;

    TIM1PeriodValue = CpuTimer1Regs.PRD.all;

    您能否进入 ConfigCpuTimer 以检查 PRD 寄存器是否正在更新?

    谢谢、Katta

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


    谢谢 Katta、

     DSP2802x_Headers_nonBIOS.cmd 文件存在问题、 内存映射错误、此处的已更正内存映射已 在控制套件中提供。

     CPU_TIMER0 :origin = 0x000C00,length = 0x000008    // CPU Timer0寄存器*/
     CPU_Timer1 :origin = 0x000C08,length = 0x000008    // CPU Timer0寄存器(CPU Timer1和 Timer2保留 TI 使用)*/
     CPU_TIMER2 :origin = 0x000C10,length = 0x000008    // CPU Timer0寄存器(CPU Timer1和 Timer2保留 TI 使用)*/