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.

[参考译文] TMS320F2800157:TMS320F2800157:计时器配置

Guru**** 2504655 points
Other Parts Discussed in Thread: TMS320F2800157

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1422970/tms320f2800157-tms320f2800157-timer-configuration

器件型号:TMS320F2800157

工具与软件:

您好!

我目前使用  TMS320F2800157控制器的 CPU 计时器。 我正在尝试使计时器的配置尽可能可配置。 因此、 我创建了一个表示一个计时器配置的结构、并将我需要的值(例如 TCR 和 TPR)放入整个寄存器的值中、创建了一个 const 结构数组、然后通过屏蔽寄存器中的所有位来初始化表示整个寄存器值的值。 当我进行调试时、我注意到结构数组的值已正确初始化、但是当我使用... tcr.all =(寄存器的值)将它们分配给寄存器值时、这些值不会在寄存器中设置。 为什么会这样? 我是否需要逐位设置寄存器定时器的位?

以下是我的代码设置示例:

CpuTimer0Regs.TPR.all = Timer_Config_Array TIMER2_index].u32Tpr_R
CpuTimer0Regs.Tprh.all = CpuTimer2_index].u32Tprh_R Timer_Config_Array
CpuTimer0Regs.tcr.all = Cpu[TIMER2_index].u32Tcr_R Timer_Config_Array
CpuTimer0Regs.prd.all = Timer_Config_Array TIMER2_index].u32Prd_R;/*设置周期值*/


正如我所说的、结构成员中的值是正确的、但没有在寄存器中设置它们。
 

注意:我在设置寄存器时还尝试了 EALLOW 和 EDIS、但这些值不会被设置

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

    您好、Mazen:

    通常、在使用.all 访问写入寄存器字段时、您需要或等于而不是写入整个寄存器、以便隔离要写入的字段。 对于 TPR 和 TPRH 寄存器、只有 TDDR 字段具有读写访问权限、而不是整个寄存器。 因此、我首先建议将您的写入内容更改为:

    CpuTimer0Regs.TPR.all |=  Timer_Config_Array TIMER2_index].u32Tpr_R
    CpuTimer0Regs.Tprh.all |=  Timer_Config_Array TIMER2_index].u32Tprh_R
    CpuTimer0Regs.tcr.all |= TIMER2_index].u32Tcr_R  Timer_Config_Array
    CpuTimer0Regs.PRD.All |= Timer_Config_Array TIMER2_INDEP].u32Prd_R;/*设置周期值*/

    您是否能够尝试将结构体值读入变量而不是寄存器中、以验证是否通过调试器正确完成了结构体访问?

    我根据您的命名惯例假设这些结构成员是 uint32_t 类型。 请注意、TPR、TPRH 和 TCR 寄存器是16位寄存器、因此应将它们更改为 uint16_t 结构成员以避免错误。

    此致、

    Delaney

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

    您好、Delaney、  

    我已经调整了我的代码以实现您所说的需要完成的注释、这是现在的代码:

     易失性 u16 u16Tpr_R = Timer_Config_Array TIMER0_INDEP].u16Tpr_R
     易失性 u16 u16Tprh_R = Timer_Config_Array TIMER0_INDEP].u16Tprh_R
     Volatile U16 u16Tcr_R = TIMER0_INDEP].u16Tcr_R Timer_Config_Array
     易失性 u32 u32Prd_R = TIMER0_INDEP].u32Prd_R Timer_Config_Array
     易失性 u32 u32PerfACT = Timer_Config_Array TIMER0_INDEP].u32PerfACT
     易失性 u32 u32PerfAvg = Timer_Config_Array TIMER0_index].u32PerfAvg
     易失性 u32 u32PerfMax = TIMER0_INDEP].u32PerfMax Timer_Config_Array
     易失性 u32 u32PerfMin = Timer_Config_Array TIMER0_index].u32PerfMin
     Volatile U16 u16PerfOvf = Timer_Config_Array TIMER0_index].u16PerfOvf

     EALLOW
      /*设置引导加载程序可压缩性的复位值*/
      CpuTimer0Regs.TPR.all |= u16Tpr_R
      CpuTimer0Regs.tprh.all |= u16Tprh_R;
      CpuTimer0Regs.tcr.all |= u16Tcr_R


      CpuTimer0Regs.PRD.All |= u32Prd_R;/*设置周期值*/

      EDIS

    当我进行调试时、这些值被放置在我已正确创建的易失性变量中、但在|=分配时、不会写入寄存器。 为什么会这样呢? 这是否意味着.all 方法不能写入计时器的寄存器
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mazen:

    否、应可以使用.all 方法写入 CPUTIMER 寄存器。 您能否向我发送您的代码、以便我尝试重现问题?

    此致、

    Delaney

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
      易失性 u16 u16Tpr_R = Timer_Config_Array TIMER0_INDEP].u16Tpr_R
      易失性 u16 u16Tprh_R = Timer_Config_Array TIMER0_INDEP].u16Tprh_R
      Volatile U16 u16Tcr_R = TIMER0_INDEP].u16Tcr_R Timer_Config_Array
      易失性 u32 u32Prd_R = TIMER0_INDEP].u32Prd_R Timer_Config_Array
      易失性 u32 u32PerfACT = Timer_Config_Array TIMER0_INDEP].u32PerfACT
      易失性 u32 u32PerfAvg = Timer_Config_Array TIMER0_index].u32PerfAvg
      易失性 u32 u32PerfMax = TIMER0_INDEP].u32PerfMax Timer_Config_Array
      易失性 u32 u32PerfMin = Timer_Config_Array TIMER0_index].u32PerfMin
      Volatile U16 u16PerfOvf = Timer_Config_Array TIMER0_index].u16PerfOvf

      EALLOW
      /*设置引导加载程序可压缩性的复位值*/
      CpuTimer0Regs.TPR.all |= u16Tpr_R
      CpuTimer0Regs.tprh.all |= u16Tprh_R
      CpuTimer0Regs.tcr.all |= u16Tcr_R


      CpuTimer0Regs.PRD.All |= u32Prd_R/*设置周期值*/
      EDIS;

    这是我在函数中的代码。 当执行该函数时、我注意到通过调试这些值正确地放置在我创建的易失性变量中、但当将这些值分配给寄存器时、寄存器内部没有变化。
    `μ A
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mazen:

    您还能发送您的结构定义吗? 在尝试以代码形式写入这些寄存器时、我无法重现问题。 此外、在调试时、您是否已确保"Register"视图中已启用了"Continuous Refresh"? 如果不是这样、则值可能是实际写入的、但只是没有在 CCS 查看器中更新。

    此致、

    Delaney