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: CPU利用HLC向CLB读取寄存器值的问题

Part Number: TMS320F28377S

您好,我想在程序运行时,CPU通过HLC向CLB读取计数器的值,例如C0。为此我用syscfg设计了一个简单的程序验证是否能正常读取,如下:

Count0:

Reset: Counter 0 Equals Match1;

Event Tigger: Zero;

Counter Enable: one;

Direction: one;

Match Reference 1:1000;

R0 Initial Value: 50;

Event0: Counter 0 Equals Zero;

HLC Program 0:

PUSH R0;

Uint32 CTR;

CTR = Clb1DataExchRegs.CLB_PUSH[0];

该程序旨在读取R0的初始值50,但事实上不能成功读取,CTR的值始终为0。

我想知道是否有其他寄存器需要配置,CPU想要读取CLB寄存器中的值需要的步骤有哪些,是否有关于CPU读取CLB中寄存器的值的例程可以进行参考。

  • 您好,

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 您好

    我对您尝试在计数器中实现的目标感到有点困惑。 R0是否应硬编码为50并且与计数器函数无关?

    CLB 可能未正确启用。 您能否发送.syscfg 文件和启用 CLB 的初始化代码片段?

  • 您好,感谢回复。

    我的实际需求是在计数器比较事件发生时读取C0的值,因此在验证程序中加了计数器相关的配置。

    附件中为.syscfg文件请查收,初始化程序如下,Board_init()程序为.syscfg文件自动生成

    另外,仿照例程clb_ex13_push_pull,我打开了clb中断,且在中断回调函数中仅清零了中断标志位,没有做其他任何操作。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    void main(void)
    {
    InitSysCtrl();
    DINT;
    InitPieCtrl();
    IER = 0x0000;
    IFR = 0x0000;
    InitPieVectTable();
    EINT;
    Board_init();
    while(1)
    {
    main_count++;
    SysCtl_delay(20000000);
    temp = Clb1DataExchRegs.CLB_PUSH[0];
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    clb.syscfg

  • 您好

    您的.syscfg 和 c 代码看起来是正确的。 您能否尝试查看寄存器窗口中的 CLB_push_y 寄存器?

  • 您好

    我已经尝试了debug模式下查看CLB_push_y寄存器的值,各寄存器中的数据均为0。

    如果可以的话我希望是否能有一个CPU使用HLC从CLB中读取寄存器值的例程。

    感谢!

  • 您好

    您是否可以尝试在 Board_init ()之后添加一个 SysCtl_enablePeripheral (SysCtl_PERIPH_CLK_CLB1);函数调用?