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:8MHz UART

Guru**** 2581345 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/612150/rtos-8-mhz-uart

工具/软件:TI-RTOS

您好!

对于我的项目、我必须运行 UART 的高频、例如8MHz。 如果不可能达到至少8MHz、

我修改了一个 NORTOS UART 回波示例、它在8MHz 下运行、并进行了以下修改  

const eUSCI_UART_Config uartConfig =
{
EUSCI_A_UART_CLOCKSOURCE_SMCLK、 // SMCLK 时钟源
3、 // BRDIV
0、 // UCxBRF
0、 // UCxBRS
EUSCI_A_UART_NO_奇 偶校验、 //无奇偶校验
EUSCI_A_UART_LSB_FIRST、 // LSB 优先
EUSCI_A_UART_One_stop_bit、 //一个停止位
EUSCI_A_UART_MODE、 // UART 模式
0//EUSCI_A_UART_oversampling_BAUDRATE_generation //过采样
}; 

int main (内部 main)()

(笑声)

 CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 24);

(笑声)

到目前为止。 一切都好。 (笑声) SMLK 24MHZ 分频器为3。 我在示波器上看到频率。

问题是、我无法在 TIRTOS 中以8MHz 运行 UART。

我做了什么...

1.我在 PowerMSP432.c 中更改并重新编译 TIRTOS

PowerMSP432_PerfLevel PowerMSP432_perfLeets[NUMPERFLEVELS]={

(笑声)

{.ActiveState = AM_DCDC_VCORE1、
.VCORE = 1、
时钟源= CS_DCOCLK_SELECT、
DCORESEL = CS_DCO_FREQUENCY 48、
.DIVM = CS_CLOCK_DIVIDER_1、
DIVHS = CS_CLOCK_DIVIDER_2、
.divs = CS_clock_divider _2、
.flashWaitStates = 2、
.enableFlashBuffer = true、
.MCLK = 48000000、
.hSMCLK = 24000000、
SMCLK = 24000000、
.ACLK = 32768
}、

 

我 已正确更改相关阵列 const UARTMSP432_BudrateConfig uartMSP432Budrates []。

{80000、24000000、 3、 0、 0、 0}、

 


我可以初始化、但无法运行 UART。

在第二个 UART_WRITE 时 、UCTXIFG = 0、(UCAxIFG 寄存器)

然后选择 EXIT()。

问题

1为什么该寄存器字段为0? 我在示波器上看到发送是在 UART 线路上进行的。 一切都好?

2我是否可以简单地向 UCTXIFG 写入1? 如果是、我可以在 TIRTOS 中执行该操作吗?

谢谢

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

    无需重新构建 PowerMSP432.c、请查看以下文章 e2e.ti.com/.../2222805

    此外、您能否共享您的 MSP_EXP432P401R.c 文件。

    谢谢、

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

    >无需重新构建 PowerMSP432.c,请查看以下文章 e2e.ti.com/.../2222805

    抱歉、通过您的链接、我看到 TI 建议重新构建 TIRTOS。  

    或者、我必须如何理解 我们的"新"绩效水平?

    通过使用完全相同的新元件、否则无法达到 UART 频率8MHz……

    因此、我重建 TIRTOS。

    现在、我的代码完全...

    /*
    === uartecho.c ====
    */
    
    #include 
    #include 
    /* XDCtools 头文件*/
    #include 
    #include 
    
    /* BIOS 头文件*/
    #include 
    #include 
    #include 
    
    /* TI-RTOS 头文件*/
    #include 
    #include 
    
    /*示例/板头文件*/
    #include "Board.h"
    
    #include 
    #include 
    
    #define TASKSTACKSIZE 768
    
    Task_Structt task0Struct;
    Char task0Stack[TASKSTACKSIZE];
    Semaphore_handle writeSem;
    uint32_t cnt;
    
    void writeCallBack (UART_Handle h、void * buf、size_t count)
    {
    CNT =计数;
    Semaphore_post (writeSem);
    }
    
    #define EUSCI_A_CMSIS (x)(((EUSCI_A_Type *) x)
    /*
    === 回声 Fxn =====
    *此函数的任务是静态创建的。 请参阅工程的.cfg 文件。
    */
    void echoFxn (UArg0、UArgarg1)
    {
    字符缓冲[256];
    memset (buff、0x55、256);
    UART_Handle UART;
    UART_Params uartParams;
    
    /*创建一个数据处理关闭的 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 = 80000;
    uartParams.writeMode = UART_MODE_CALLACK;
    uartParams.writeCallback = writeCallBack;
    
    
    UART = UART_OPEN (Board_UART0、uartParams);
    
    if (UART == NULL){
    System_abort ("打开 UART 时出错");
    }
    
    /*循环永久回显*/
    CNT = 0;
    while (1)
    {
    uint32_t n = UART_WRITE (UART、缓冲区、256);
    Semaphore_pend (writeSem、BIOS_wait_forever);
    BITBAND_PERI (EUSCI_A_CMSIS (EUSCI_A0_BASE)->IFG、UCTXIFG_OFS)= 1;
    Task_sleep(2);
    }
    }
    /*
    === main ====
    */
    int main (void)
    {
    /*呼叫板初始化函数*/
    Board_initGeneral();
    Board_initGPIO();
    Board_initUART();
    
    writeSem = Semaphore_create (0、NULL、NULL);
    
    /*构造 BIOS 对象*/
    Task_Params taskParams;
    
    Task_Params_init (&taskParams);
    taskParams.STACKSIZE = TASKSTACKSIZE;
    taskParams.stack =_task0Stack;
    taskParams.instance->name ="回波";
    taskParams.priority = 12;
    Task_construct(&task0Struct,(Task_Functr) echoFxn、&taskParams、NULL);
    
    /*打开用户 LED */
    GPIO_WRITE (Board_LED0、Board_LED_ON);
    
    /*启动 BIOS */
    BIOS_start();
    
    返回(0);
    }
    

    问题是

    为什么我必须将 UCTXIFG 位设置回1?

    为什么使用 UART freq 不会发生这种情况。 9600... 256000?

    谢谢

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

    您好!

    我刚刚创建 了这个示例代码(7MBaud) 、我看不到这个行为、您能不能尝试一下、并告诉我您的结果。

    关于"重新构建 PowerMSP432.c"、您只需要在 MSP_EXP432P401R.c 中创建自定义性能级别、如以下文章 https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/603334/2220428#2220428中所述

    无论如何、8MBaud 超出规格、因此我们不推荐使用它、另请查看此帖子 :https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/609301/2242742#2242742 、如果您有其他问题、请告知我们。

     此致、

      David

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

    感谢您的详细回答。

    是的、我同意我不必重建 TIRTOS、感谢您的建议...

    关于您的项目、我无法构建它、遇到以下错误。


    ****为项目 uartecho_eUSCI_A3_MSP_EXP432P401R_tirtos_ccs 进行纯净配置调试****

    "C:\\ti\\ccsv7\\utils\\bin\\gmake"-k -j 8 clean -O
    DEL /F "uartecho_eUSCI_A3_MSP_EXP432P401R_tirtos_ccs.hex" uartecho_eUSCI_A3_MSP_EXP432P401R_tirtos_ccs.out"
    del /F "MSP_EXP432P401R.obj""main_tirtos.obj""uartecho.obj"
    del /F "MSP_EXP432P401R.d""main_tirtos.d""uartecho.d"
    找不到 C:\users\xford\temp\uartecho_eUSCI_A3_MSP_EXP432P401R_tirtos_ccs\Debug\uartecho_eUSCI_A3_MSP_EXP432P401R_tirtos_ccs.hex
    找不到 C:\users\xford\temp\uartecho_eUSCI_A3_MSP_EXP432P401R_tirtos_ccs\Debug\MSP_EXP432P401R.obj
    找不到 C:\users\xford\temp\uartecho_eUSCI_A3_MSP_EXP432P401R_tirtos_ccs\Debug\MSP_EXP432P401R.d
    '已完成清洁'
    '

    ****构建完成****
    发生构建文件生成错误..
    引用的工程"tirtos_builds_MSP_EXP432P401R_release_ccs"在工作区中不存在。 项目'uartecho_eUSCI_A3_MSP_EXP432P401R_tirtos_ccs'可能无法按预期构建。
    构建停止..

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

    您好!

     也许您可以尝试将项目导入到全新的 CCS 工作区中。 如果不起作用 、我使用了 UART echo 示例作为参考、因此您可能需要导入此项目、然后将文件(覆盖)从我的项目复制到此项目中。

     希望这对您有所帮助。

       David

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

    好的、现在它工作了...

    谢谢你