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.

[参考译文] 编译器/TMS320C6713B:位字段覆盖完整寄存器

Guru**** 2560390 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/590793/compiler-tms320c6713b-bit-field-overwrite-complete-register

部件号:TMS320C6713B

工具/软件:TI C/C++编译器

您好,

我正在处理TMS320C6713 PLL。我为每个PLL寄存器编写位字段,而不是在PLL寄存器中对每个位进行ORing和ANDING:

结构PLL_XYZ_REG{

     无符号int w:5;

     无符号int x:1;

     无符号int y:10;

     无符号int z:16;

}


我编写了一个链接程序脚本,将这些结构映射到适当的内存位置,并使用CCS监视窗口验证每个寄存器内存位置。

现在当我写一些类似的东西时:

结构PLL_XYZ_REG PLL;

PLL.w = 0x5;

PLL.x = 1;

现在 PLL.x =1;位字段分配将覆盖整个寄存器!!!!!! 这到底有多可能???? 请提供帮助。

此致,

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

    位字段是*SIZE,不是位置。W是5位宽。 您可能也要将它们设置为无符号。 不能保证比特字段在int中的位置。

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

    我可以说一些。  虽然我不能回答所有问题。

    您不能共享我可以编译的完整测试案例。  但根据您所展示的内容,这条线可能...

    aimal Khan 说:
    PLL.x = 1;[/QUOT]

    ...生成的装配体类似于...

    MVKL .S1 _PLL,A3.
    MVKH .S1 _PLL,A3.
    LDBU .D1T1 *A3,A4 ;|14|
    无操作 4.
    设置 .S1 A4,5,5,A4. ;|14|
    
    STB .D1T1 A4,*A3 ;|14|
    

    请注意用于访问PLL存储器位置的负载字节和存储字节指令。  我不知道在PLL中更改一点的正确方法。  但也许不是这样。

    谢谢,此致,

    -George

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

    其它寄存器以这种方式配置正常工作。只有PLL寄存器(DIV0-3和OSCDIV0)以这种方式工作。 奇怪。