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/MSP430FR5994:向20位 DMS 寄存器加载正确(不正确)的值

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/917157/ccs-msp430fr5994-load-the-20-bit-dms-register-with-right-not-wrong-value

器件型号:MSP430FR5994

工具/软件:Code Composer Studio

您好!

使用以下命令加载20位 DMA 地址寄存器:__data20_write_long。

该视图显示了 DMA0SA 和 DMS0DA 寄存器中的值。 最高4位未加载。 您能否在没有警告的情况下发送一个包含有效命令的样本?

此致
哈迪

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

    您好、Hardy、

    看看此示例是否有用。

    出发地: TI Resource Explorer FR5994示例代码

    #include
    #include

    int main (空)
    {
       WDTCTL = WDTPW | WDTHOLD;              //停止 WDT

       //配置 GPIO
       P1OUT = 0;
       P1DIR = BIT0;                          //表示 LED

       //禁用 GPIO 上电默认高阻抗模式以激活
       //先前配置的端口设置
       PM5CTL0 &=~LOCKLPM5;

       //配置 DMA 通道0
       __data20_write_long ((uintptr_t)&DMA0SA、(uintptr_t) 0x1C20);
                                               //源块地址
       __data20_write_long ((uintptr_t)&DMA0DA、(uintptr_t) 0x1C40);
                                               //目标单个地址
       DMA0SZ = 16;                           //块大小
       DMA0CTL = DMADD_5 | DMASRCINCR_3 | DMADSTINCR_3;//报告、包括
       DMA0CTL |= DMAEN;                      //启用 DMA0

       while (1)
       {
           P1OUT |= 0x01;                     // P1.0 = 1、LED 打开
           DMA0CTL |= DMAREQ;                 //触发块传输
           P1OUT &=~0x01;                    // P1.0 = 0、LED 关闭
       }
    }

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

    您好!

    行"#include "很重要。
    我复制了用于将 DMASA 和 DMADA 加载到程序中的行。 编译 prozess 结束时不显示错误消息。 在运行时、我在调试器中看到寄存器中最重要的部分未加载。
    我是否必须对项目属性进行一些更改才能使用此代码?

    此致
    哈迪

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

    您好、Hardy、

    尝试将 __data16_write_addr 替换为__data20_write_long。

       __data16_write_addr (&DMA0SA,源代码);

       __data16_write_addr (&DMA0DA,目的);

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

    您好!

    感谢您的回答。
    问题是在20位目的地址和源地址寄存器中加载一个值。 如果我使用高于 FFFF 的存储器部分、则该值只能为一个长值。

    您能否编写我需要导入哪些内容才能使用此函数? 我尝试了 intrinsics.h 和 stdint.h 这两个函数都未包含此函数。

    intrinsics.h 我在 www.ti.com/.../slau132r.pdf 中找到

    此致
    哈迪

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

    您好、Hardy、

    我将使用 CCS 10和编译器版本 TI v20.2.1.LTS。  应在 instrinsics.h 中定义这些参数  它们的版本是我拥有的版本。

    查看 编译器指南的最新版本。

    #if defined (_MSP430X_)
    /*------------------ *
    /* MSP430X 内在函数                                                       */
    /*------------------ *
    void          __data16_write_addr (unsigned short、unsigned long);
    unsigned long __data16_read_addr (unsigned short);
    void          __data20_write_char (unsigned long、unsigned char);
    void          __data20_write_short (unsigned long、unsigned short);
    void          __data20_write_long (unsigned long、unsigned long);
    unsigned char __data20_read_char (unsigned long);
    unsigned short __data20_read_short (unsigned long);
    unsigned long __data20_read_long (unsigned long);

    #endif

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

    您好!

    感谢您提供命令。

    我认为最好的选择是使用"_data20_write_long (unsigned long、unsigned long);"以有限的 long 值加载20位 DMA 寄存器。

    图片显示了这种情况。 值为0x4200A 和0x420C6。 但是、在执行加载命令后、最小时4位中的"4"丢失。

    在没有编译器警告的情况下、我可以执行什么操作来将完整地址加载到寄存器中?

    此致
    哈迪

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

    您好、Hardy、

    我们的软件团队说您必须使用、否则将无法使用。

    void          __data20_write_short (unsigned long、unsigned short);
    void          __data20_write_long (unsigned long、unsigned long);

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

    [引用 USER="Hardy Zissel]HE 值为0x4200A 和0x420C6。 但是、在执行加载命令后、最近4位中的"4"缺失。[/quot]对于屏幕截图中显示的反汇编、我看不到生成的指令出现任何错误-它们看起来是向 DMA0SA 和 DMA0DA 寄存器写入20位。

    您可以在存储器浏览器中查看地址0x0510 (DMA 通道0寄存器的基址)、显示了什么?

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

    作为内在函数进行一些设置或其他导入是否重要?

    遗憾的是、您之前发布的示例(使用2条命令)对我不起作用。 您能给我发送一个示例代码、这样我就能看到寄存器中的值吗?

    此致
    哈迪

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

    您好、Hardy、

    是否仍然卡住或您是否能够使一切正常工作?

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

    遗憾的是、显示的示例不起作用。 它使用其他符号运行、并带有编译器发出的警告。 我对此并不满意。 我不确定编译器是否会在每次新编译时生成稳定的代码。

    此致
    哈迪

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

    您好、Hardy、

    我从您那里听说过几天,因此我假设您能够解决您的问题。
    如果情况并非如此,请单击“这无法解决我的问题”按钮,并使用更多信息回复此主题。
    如果此主题锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。