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.

[参考译文] RTOS/MSP430FR5994:需要将多个 UART 与 Launchpad 配合使用

Guru**** 2611705 points
Other Parts Discussed in Thread: MSP430FR5994

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/581883/rtos-msp430fr5994-need-to-use-multiple-uarts-with-launchpad

器件型号:MSP430FR5994

工具/软件:TI-RTOS

我正在尝试按预期使用 uart0、并添加使用 uartA3、P6.0、6.1与另一个处理器进行通信。  我搜索了这个论坛、找到了一个在附加 UART 中添加的另一个处理器的示例。  esxample 很旧,有些调整必须疯狂。  我执行了这些操作、发现 uartA0仍然有效、但 uartA3则不起作用。  这个错误似乎是一个在无政府状态中某个地方的非固定变量。  为了简化操作、我尝试将 uartecho 示例从 UARTA 转换为 UART A3。  当我执行此操作时、在程序加载时收到一条消息、指出"received exception from ROV server: target memory read failed at address 0xffffffff length 128。 根据应用程序映射、此读取无效。  应用程序可能未初始化或已损坏。"

我相信我在转换中错过了一些东西,但却找不到。

我使用的是 CCSV7和 tirtos_msp43x_2_20_00_06。  所有更改都是对基本 uartecho 示例进行的,该示例确实起作用。

我所做的更改如下。  任何帮助都将得到显著改善。  谢谢

msp430fr5994.h

#ifdef __ASM_HEADER__/* begin #defines for assembler */
#define EUSCI_A3_Vector ".int24"/* 0xFFC0 */
其他
#define EUSCI_A3_Vector (24 * 1U)/* 0xFFC0 */
#endif


#ifdef __ASM_HEADER__/* begin #defines for assembler */
#define EUSCI_A0_Vector ".int48"/* 0xFFF0 */
其他
#define EUSCI_A0_Vector (48 * 1U)/* 0xFFF0 */
#endif

Board.h

#define Board_UART3 MSP_EXP430FR5994_UARTA3

uartechoA3B.c

/*创建一个数据处理关闭的 UART。 *
UART_PARAMS_INIT (uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_full;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudrate = 9600;
UART = UART_OPEN (Board_UART3、uartParams);


uartechoA3B.cfg

var hwiParams = new halHwi.Params();

hwiParams.arg = 0;
halHwi.create (24、"&UARTEUSCIA_hwiIntFxn"、hwiParams);

MSP_EXP430FR5994.c

/*
*========================================= UART ========================================================
*
/*放入子段以允许 TI 链接器正确删除项目*/
#if defined (__TI_Compiler_version__)
#pragma DATA_SECTION (UART_CONFIG、".CONST:UART_CONFIG")
#pragma DATA_SECTION (uartEUSCIADWAttrs、".const:uartEUSCIADWAttrs")
#endif

#include
#include

UARTEUSCIA_Object uartEUSCIAObjects[MSP_EXP430FR5994_UARTCOUNT];

/*
*波特率分频器是使用 MSP430波特率确定的
*计算器
* software-dl.ti.com/.../index.html
*
CONST UARTEUSCI_BAURATEConfig uartEUSCIABAUDRATE[]={
/*{波特率、输入时钟、预分频器、UCBRFx、UCBRSx、 过采样}*/

.outputBudrate = 115200、
.inputClockFreq = 80000、
.prescalar = 4、
hwRegUCBRFx = 5、
hwRegUCBRSx = 85、
过采样= 1.
}、
{9600、80000、52、1、0、 1}、
{9600、32768、3、0、3、 0}、
};

CONST UARTEUSCI_HWAttrs uartEUSCIAHWAttrs[MSP_EXP430FR5994_UARTCOUNT]={

baseAddr = EUSCI_A3_base、
时钟源= EUSCI_A_UART_CLOCKSOURCE_SMCLK、
.bitOrder = EUSCI_A_UART_LSB_FIRST、
numBudrateEndries = sizeof (uartEUSCIABAURATEes)/sizeof (UARTEUSCIA_BAUDRAateConfig)、
.budrateLUT = uartEUSCIA波特 率
}、
};

const UART_Config UART_config[]={

.fxnTablePtr =&UARTEUSCIA_fxnTable、
.object = uartEUSCIAObjects[0]、
.hwAttrs = uartEUSCIADHWAttrs[0]
}、
{NULL、NULL、NULL}
};

/*
*==== MSP_EXP430FR5994_initUART ===
*
void MSP_EXP430FR5994_initUART (void)

/* P6.0、1 = EUSCI_A3 TXD/RXD *
GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P6、
GPIO_PIN0、GPIO_secondary 模块功能);
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P6、
GPIO_PIN1、GPIO_secondary 模块功能);

/*初始化 UART 驱动程序*/
UART_INIT();


MSP_EXP430FR5994.h

typedef enum MSP_EXP430FR5994_UARTName{
MSP_EXP430FR5994_UARTA3 = 0、

MSP_EXP430FR5994_UARTCOUNT
}MSP_EXP430FR5994_UARTName;

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

    您是否认为您可以共享您的项目、以便我更好地了解这一点?

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

    弗兰克、

    我想我知道为什么您的 UART 可能不起作用、在您的 MSP_EXP430FR5994_initUART 上、当您调用 GPIO_setPeripheralModuleFunctionOutputPin ()时、您应该将 P6.0和 P6.1的模式设置为 GPIO_primary_module_function、如下所示:

    GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P6、
    GPIO_PIN0、GPIO_PRIMARY_MODULE_FUNCTION);
    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P6、
    GPIO_PIN1、GPIO_PRIMARY_MODULE_FUNCTION); 

    谢谢、
    Gerardo

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

    Gerado、

    感谢您的快速响应。 遗憾的是、尽管选择主函数当然需要完成、但必须执行其他操作、因为在程序加载和初始化时、我仍会在 ROV 中收到相同的错误消息。

    我已按照您之前的回复中的要求压缩了该项目并将其发送至 ate2e.ti.com/.../5518.uartecho_5F00_MSP_5F00_EXP430FR5994_5F00_TIA3B.ziptached。

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

    您是否修改了 msp430fr5994.h?

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

    不,我不相信。  如果我这么做是无意的。  我确实打开了该文件、因为在这里我可以找到中断编号。  您是否可以向我发送一份干净的副本? 然后、我可以用 winmerge 检查我的探伤。   msp430fr5994.h 中 C:\ti\ccsv7\ccs_base\msp430\include 的文件日期与所有其他文件的日期相同、2016年11月23日、因此我预计不会进行任何更改。

    谢谢

    弗兰克

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

    弗兰克、

    那应该是可以的。 我建议再次从 UART 回波示例开始并执行以下操作。  导入 UART 回显示例并确保其构建。 然后进行以下修改:

    更改了 MSP_EXP430FR5994.c

    CONST UARTEUSCI_HWAttrs uartEUSCIAHWAttrs[MSP_EXP430FR5994_UARTCOUNT]={
    {
    baseAddr = EUSCI_A3_base、
    时钟源= EUSCI_A_UART_CLOCKSOURCE_SMCLK、
    .bitOrder = EUSCI_A_UART_LSB_FIRST、
    numBudrateEndries = sizeof (uartEUSCIABAURATEes)/sizeof (UARTEUSCIA_BAUDRAateConfig)、
    .budrateLUT = uartEUSCIA波特 率
    },
    }; 

    void MSP_EXP430FR5994_initUART (void)
    {
    /* P2.0、1 = EUSCI_A0 TXD/RXD *
    GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P6、
    GPIO_PIN0、GPIO_PRIMARY_MODULE_FUNCTION);
    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P6、
    GPIO_PIN1、GPIO_PRIMARY_MODULE_FUNCTION);
    
    /*初始化 UART 驱动程序*/
    UART_init();
    } 

    更改 MSP_EXP430FR5994.h

    typedef enum MSP_EXP430FR5994_UARTName{
    MSP_EXP430FR5994_UARTA3 = 0、
    
    MSP_EXP430FR5994_UARTCOUNT
    }MSP_EXP430FR5994_UARTName; 

    更改 Board.h

    #define Board_UART3 MSP_EXP430FR5994_UARTA3 

    更改 uartecho.cfg

    halHwi.create (24、"&UARTEUSCIA_hwiIntFxn"、hwiParams); 

    更改 uartecho.c

    UART = UART_OPEN (Board_UART3、uartParams); 

    这就是我为使 UART 3回波所做的事情。

    如果可以、请告诉我、
    Gerardo

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

    Gerado、

    这起作用了。  非常感谢。  我调查了我之前的计划可能有什么问题、但仍然不知道、因为我已经做了上述所有更改、但仍然失败。  我已经完成了许多硬件软件/项目、我的经验告诉我、它几乎 不是硬件。  在这种情况下、结果好坏参半。  我使用的板上的 P6 1和0有问题。  最后一个必须到位的部分是使用新的电路板。  据说,我向您签出的版本仍然失败,您没有。  我将使用它作为我真正需要编写的代码的基础。

    再次感谢。

    弗兰克

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

    是的、我尝试导入您的程序、我遇到了一些问题、这就是我决定再次从示例开始的原因。 我确实将您的文件与我拥有的文件进行了比较、几乎是相同的、因此我目前无法真正解释那里的错误。 但我很高兴您现在有一个正常工作的项目。

    谢谢、
    Gerardo