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/MSP-FET430UIF:CCS/MSP-FETU430IF

Guru**** 2392095 points
Other Parts Discussed in Thread: MSP430F1611, MSP-FET

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/818822/ccs-msp-fet430uif-ccs-msp-fetu430if

器件型号:MSP-FET430UIF
主题中讨论的其他器件:MSP430F1611MSP-FETMSP430WARE

工具/软件:Code Composer Studio

我正在 Win7中使用"Code Composer Studio v9"和"MPS430 USB 调试接口 MSP-FETU430IF"。
当我创建 CCS 项目时、我定义了一个与 MSP430F1611微控制器的"TI MSP430 USB1 [默认值]"连接。
该工程包含多个.c 和.h 文件、但是在调试启动时、它似乎可以正常工作。
没有错误或警告消息。 程序自动进入运行(恢复)状态、绿色 LED (电源)亮起、而红色 LED (模式)闪烁。 在控制台中显示闪存/FRAM 和 RAM 的使用情况。
大约一分钟后、绿色和红色 LED 亮起、但硬件无法正常工作。 似乎该程序尚未加载/上传。
可能是什么?


此致、

Matteo

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

    您好、Matteo、

    我想让您仔细检查一下:

    在对电路板进行编程之前、您能否在 CCS 中再次检查是否已选中"TI MSP430 USB1 [Default](TI MSP430 USB1 [默认值])"选项? 这可以通过右键单击您的项目>属性>常规来完成、然后查看"Connection"字段并确保 选择了"TI MSP430 USB1 [Default]"。

    此外、这是您尝试编程的定制 PCB 吗? 还是 TI 电路板?

    谢谢!

    Mitch

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

    您好 Mitch、

    我已选中、我已连接屏幕:

    这是一个定制的 PCB、他可以与其他人正常工作  

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

    抱歉 Mitch、

    我之前发送了消息以完成编写。

    但是、我写的是、这是一个定制 PCB、它可以与其他 IDE 正常配合使用。


    此致、

    Matteo

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

    您好、Matteo、

    感谢您提供信息。 下面是 MSP-FET 器件和 F1611器件之间所需连接的图。 您能否再次检查以下连接是否已建立以及 RST 线路上是否有上拉电阻器? 您能否告诉我上拉值是多少?

    谢谢、

    Mitch

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

    当然、明天我会检查、我会给您写信!
    我不知道这些信息是否有用、但我在程序中添加了一些代码行: printf ("Hello World XXXX!\n"\});其中 XXXX 是编写代码的行的编号、因此我可以在控制台上看到程序是否正在运行或注意。
    并且,程序一直运行到代码为 CHE _EINT()的行;

    我还尝试使用其他代码来更改行代码、例如"_enable_interrupt ();"或"_bis_SR_register (GIE);"、但没有结果。

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

    您好、Matteo、

    感谢您运行该测试。  

    需要快速检查的一点是:您是否禁用了看门狗计时器? 如果不是,这可能会重置系统,并且不允许它通过_EINT()行。 这并不能解释您的系统在其他 IDE 中工作的原因、但值得仔细检查。

    您将需要确保在主程序的开头禁用看门狗计时器、如下所示:

    另一件要尝试的事情:您能否在_EINT()行之前放置一个断点,然后单步执行程序并查看它的位置?

    谢谢、

    Mitch

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

    您好 Mitch、

    我使用以下命令禁用了看门狗计时器:

    WDTCTL = WDTPW | WDTHOLD;

    实际上、我尝试添加您的代码、但在调试或编译期间、会出现以下错误:

    它不知道 P2REN。

    谢谢、

    Matteo

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

    您好、Matteo、

    我添加了端口2代码、仅用于显示 添加 WDTCTL = WDTPW | WDTHOLD;行的位置。 您可以在上面的屏幕截图中删除第399 - 402行。

    谢谢、

    Mitch

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

    您好 Mitch、

    在我写之前:

    WDTCTL = WDTPW + WDTHOLD;


    现在使用代码:

    WDTCTL = WDTPW | WDTHOLD;

    它不起作用、它保持代码_EINT();

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

    您好 Mitch、

    一个问题:在您看来、这是否是计时器 A 代码的问题?

    对不对?

    我应该更改任何符号吗?


    谢谢、

    Matteo

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

    您好 Mitch、

    一个问题:在您看来、这是否是计时器 A 代码的问题?

    对不对?

    我应该更改任何符号吗?


    谢谢、

    Matteo

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

    您好、Matteo、

    在我们深入探讨之前、让我们进行一个简单的测试。 您能否注释掉_EINT()行并查看代码是否运行?  

    谢谢、

    Mitch

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

    您好 Mitch、

    当然、我执行了它、我的代码运行了。
    我添加了一段代码 A、其中我将 P6.1和 P6.2设置为等于1的输出、代码正常工作、因为我打开连接到这些端口的 LED。


    Matteo

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

    *我执行了它,我的代码运行。

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

    还不错,很棒!

    这告诉我问题源于中断或_EINT()函数本身。

    我建议执行的下一步是禁用 每个外设内的所有中断。 例如、当配置定时器时、确保 TAIE (定时器中断使能位)被禁用。 为启用了中断的所有外设执行此操作。

    接下来,将_EINT()函数放回程序中并运行它。 如果您的外设未启用中断、此行不应起作用、您的代码应运行。

    如果软件在禁用所有外设中断的情况下挂起、_EINT()函数本身可能会出现问题。

    谢谢、

    Mitch

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

    您好 Mitch、

    我尝试过、但结果是相同的。
    我还进行了不同的测试。 使用代码_EINT()之前的几行断点;我逐步运行 SW,直到代码为_EINT()的行;
    在最后一行之后、程序进入文件 ISR_TRAP.asm 内部、并在该文件的第48 - 49行停止。 我连接了屏幕:

    可能是计时器 A 的问题?

    实际上、它是:

    #pragma vector=TIMERA1_vector
    _interrupt void Timer_A1 (void)

    我想确保中断未启用、因此我在上一次测试中删除了_interrupt void 计时器 A1 (void)中的所有代码


    谢谢、

    Matteo

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

    您好、Matteo、

    为了禁用定时器中断、您需要清除402行中的 TAIE 位(来自您之前的屏幕截图)。 第402行应如下所示:

     TACTL = tassel_0 + TACLR;      

    请注意、我们没有在这里设置 TAIE 位、因此中断没有被启用。

    如果您已设置 TAIE 位、但 ISR 为空、则 MCU 将不会执行任何操作、并且可能会进入 ISR 陷阱例程。

    查看"fet140_TA_03.c"代码示例。 这将显示如何为 TAIE 中断设置适当的 ISR。 这可以通过打开 CCS 并进入 View > Resource Explorer 导航到 Resource Explorer 来找到。 在 Resource Explorer 中、转至 Software > MSP430Ware > Devices > MSP430F1XX > MSP430F1611 > Peripheral Examples > Register Level。 在这里、您将找到代码示例。

    接下来、您可以尝试以下几项操作:

    1.禁用所有外设的所有中断,并使代码通过_EINT()函数执行。

    1A。 一旦您可以使其正常工作、请逐个启用中断、以缩小外设为您提供问题的范围。

    2.当您卡在 ISR 陷阱循环中时、暂停调试器并查看哪些中断标志处于挂起状态。 这将是一个很好的问题潜在来源列表。 完成此操作后、请禁用/启用这些中断、以查看导致问题的中断。

    谢谢、

    Mitch

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

    您好 Mitch、

    我进行了另一项测试:

    使用我在网站上找到的此软件(您可以在下面读取)、我添加了一个 Beakpoint 并使用外部源启用外设 P1.3、中断被正确启用。

    它看起来像是_EINT();工作正常。

    然后使用计时器 A 执行另一项测试、软件会停止。


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

    您好、Matteo、

    这些是您在测试中启用的唯一2个中断吗? 如果是、则问题出在计时器 A

    是否仅启用 TAIE 中断? 还是还启用 CCR0中断? 这两个矢量是2个独立的矢量、如果两个中断都启用、则需要考虑这两个矢量。

    谢谢、

    Mitch

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

    您好 Mitch、

    最后我发现了这个错误!

    问题出在我定义 TACTL 的行中、现在它是:

     TACTL = tassel_1 + MC_1 + TACLR + TAIE;      // ACLK、 upmode、clear TAR、interrupt  // mm
    //等于:TACTL = 0x0116;

     TACCR0 = 0x1F40;

    我不知道原因、但在具有不同代码的 IAR 中、程序工作正常。
    但没关系。 现在它工作正常。


    谢谢!

    Matteo

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

    只有一个问题、 在 main 内定义 TACCR0是否正确?
    在您看来、最好在 TACTL 之前或之后对其进行定义吗?

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

    您好、Matteo、

    很高兴您能够解决您的问题!

    是的、您需要在 main 内定义 TA0CCR0。 您应该在定义 TACTL 寄存器之前执行此操作。 这是因为我们希望在启动计时器之前定义 TA0CCR0。

    如果您想要显示正确计时器初始化的软件参考、可以在 CCS 中找到它们。 打开 CCS 并进入 View > Resource Explorer 导航到 Resource Explorer。 在 Resource Explorer 中、转至 Software > MSP430Ware > Devices > MSP430F1XX > MSP430F1611 > Peripheral Examples > Register Level。 在这里、您可以找到计时器软件示例。

    谢谢!

    Mitch