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.

[参考译文] TMS570LC4357:无法获取使用奇偶校验位的 SCI 模块

Guru**** 2460010 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1188538/tms570lc4357-cannot-get-sci-module-working-with-parity-bit

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

我想为 SCI 模块启用奇偶校验位(无论奇数还是偶数)、我正在使用 LAUNCHXL-TMS570LC43上的 HalCoGen 生成的代码

使用 SCI1和 SCI3、通过 XDSv110的 SCI1输出、以及通过 USB 桥接器的 SCI3输出。

这两个引脚只能通过奇偶校验无选项正确接收:picocom -b 1500000 -y n -d 8 -p 1 /dev/ttyACM0

使用 picocom -y e 或 picocom -y o 将接收垃圾结果

以下是从 HalCoGen 生成的 sciInit

void sciInit(void)
{
/* USER CODE BEGIN (2) */
/* USER CODE END */

    /** @b initialize @b SCI1 */

    /** - bring SCI1 out of reset */
    sciREG1->GCR0 = 0U;
    sciREG1->GCR0 = 1U;

    /** - Disable all interrupts */
    sciREG1->CLEARINT    = 0xFFFFFFFFU;
    sciREG1->CLEARINTLVL = 0xFFFFFFFFU;

    /** - global control 1 */
    sciREG1->GCR1 =  (uint32)((uint32)1U << 25U)  /* enable transmit */
                  | (uint32)((uint32)1U << 24U)  /* enable receive */
                  | (uint32)((uint32)1U << 5U)   /* internal clock (device has no clock pin) */
                  | (uint32)((uint32)(1U-1U) << 4U)  /* number of stop bits */
                  | (uint32)((uint32)1U << 3U)  /* even parity, otherwise odd */
                  | (uint32)((uint32)1U << 2U)  /* enable parity */
                  | (uint32)((uint32)1U << 1U);  /* asynchronous timing mode */

    /** - set baudrate */
    sciREG1->BRS = 2U;  /* baudrate */

    /** - transmission length */
    sciREG1->FORMAT = 8U - 1U;  /* length */

    /** - set SCI1 pins functional mode */
    sciREG1->PIO0 = (uint32)((uint32)1U << 2U)  /* tx pin */
                 | (uint32)((uint32)1U << 1U); /* rx pin */

    /** - set SCI1 pins default output value */
    sciREG1->PIO3 = (uint32)((uint32)0U << 2U)  /* tx pin */
                 | (uint32)((uint32)0U << 1U); /* rx pin */

    /** - set SCI1 pins output direction */
    sciREG1->PIO1 = (uint32)((uint32)0U << 2U)  /* tx pin */
                 | (uint32)((uint32)0U << 1U); /* rx pin */

    /** - set SCI1 pins open drain enable */
    sciREG1->PIO6 = (uint32)((uint32)0U << 2U)  /* tx pin */
                 | (uint32)((uint32)0U << 1U); /* rx pin */

    /** - set SCI1 pins pullup/pulldown enable */
    sciREG1->PIO7 = (uint32)((uint32)0U << 2U)  /* tx pin */
                 | (uint32)((uint32)0U << 1U); /* rx pin */

    /** - set SCI1 pins pullup/pulldown select */
    sciREG1->PIO8 = (uint32)((uint32)1U << 2U)  /* tx pin */
                 | (uint32)((uint32)1U << 1U);  /* rx pin */

    /** - set interrupt level */
    sciREG1->SETINTLVL = (uint32)((uint32)0U << 26U)  /* Framing error */
                      | (uint32)((uint32)0U << 25U)  /* Overrun error */
                      | (uint32)((uint32)0U << 24U)  /* Parity error */
                      | (uint32)((uint32)0U << 9U)  /* Receive */
                      | (uint32)((uint32)0U << 8U)  /* Transmit */
                      | (uint32)((uint32)0U << 1U)  /* Wakeup */
                      | (uint32)((uint32)0U << 0U);  /* Break detect */

    /** - set interrupt enable */
    sciREG1->SETINT = (uint32)((uint32)0U << 26U)  /* Framing error */
                   | (uint32)((uint32)0U << 25U)  /* Overrun error */
                   | (uint32)((uint32)0U << 24U)  /* Parity error */
                   | (uint32)((uint32)0U << 9U)  /* Receive */
                   | (uint32)((uint32)0U << 1U)  /* Wakeup */
                   | (uint32)((uint32)0U << 0U);  /* Break detect */

    /** - initialize global transfer variables */
    g_sciTransfer_t[0U].mode   = (uint32)0U << 8U;
    g_sciTransfer_t[0U].tx_length = 0U;
	g_sciTransfer_t[0U].rx_length = 0U;

    /** - Finaly start SCI1 */
    sciREG1->GCR1 |= 0x80U;





    /** @b initialize @b SCI3 */

    /** - bring SCI3 out of reset */
    sciREG3->GCR0 = 0U;
    sciREG3->GCR0 = 1U;

    /** - Disable all interrupts */
    sciREG3->CLEARINT    = 0xFFFFFFFFU;
    sciREG3->CLEARINTLVL = 0xFFFFFFFFU;

    /** - global control 1 */
    sciREG3->GCR1 =  (uint32)((uint32)1U << 25U)  /* enable transmit */
                  | (uint32)((uint32)1U << 24U)  /* enable receive */
                  | (uint32)((uint32)1U << 5U)   /* internal clock (device has no clock pin) */
                  | (uint32)((uint32)(1U-1U) << 4U)  /* number of stop bits */
                  | (uint32)((uint32)1U << 3U)  /* even parity, otherwise odd */
                  | (uint32)((uint32)1U << 2U)  /* enable parity */
                  | (uint32)((uint32)1U << 1U);  /* asynchronous timing mode */

    /** - set baudrate */
    sciREG3->BRS = 2U;  /* baudrate */

    /** - transmission length */
    sciREG3->FORMAT = 8U - 1U;  /* length */

    /** - set SCI3 pins functional mode */
    sciREG3->PIO0 = (uint32)((uint32)1U << 2U)  /* tx pin */
                 | (uint32)((uint32)1U << 1U); /* rx pin */

    /** - set SCI3 pins default output value */
    sciREG3->PIO3 = (uint32)((uint32)0U << 2U)  /* tx pin */
                 | (uint32)((uint32)0U << 1U); /* rx pin */

    /** - set SCI3 pins output direction */
    sciREG3->PIO1 = (uint32)((uint32)0U << 2U)  /* tx pin */
                 | (uint32)((uint32)0U << 1U); /* rx pin */

    /** - set SCI3 pins open drain enable */
    sciREG3->PIO6 = (uint32)((uint32)0U << 2U)  /* tx pin */
                 | (uint32)((uint32)0U << 1U); /* rx pin */

    /** - set SCI3 pins pullup/pulldown enable */
    sciREG3->PIO7 = (uint32)((uint32)0U << 2U)  /* tx pin */
                 | (uint32)((uint32)0U << 1U); /* rx pin */

    /** - set SCI3 pins pullup/pulldown select */
    sciREG3->PIO8 = (uint32)((uint32)1U << 2U)  /* tx pin */
                 | (uint32)((uint32)1U << 1U);  /* rx pin */

    /** - set interrupt level */
    sciREG3->SETINTLVL = (uint32)((uint32)0U << 26U)  /* Framing error */
                      | (uint32)((uint32)0U << 25U)  /* Overrun error */
                      | (uint32)((uint32)0U << 24U)  /* Parity error */
                      | (uint32)((uint32)0U << 9U)  /* Receive */
                      | (uint32)((uint32)0U << 8U)  /* Transmit */
                      | (uint32)((uint32)0U << 1U)  /* Wakeup */
                      | (uint32)((uint32)0U << 0U);  /* Break detect */

    /** - set interrupt enable */
    sciREG3->SETINT = (uint32)((uint32)1U << 26U)  /* Framing error */
                   | (uint32)((uint32)1U << 25U)  /* Overrun error */
                   | (uint32)((uint32)1U << 24U)  /* Parity error */
                   | (uint32)((uint32)0U << 9U)  /* Receive */
                   | (uint32)((uint32)1U << 1U)  /* Wakeup */
                   | (uint32)((uint32)1U << 0U);  /* Break detect */

    /** - initialize global transfer variables */
    g_sciTransfer_t[2U].mode   = (uint32)0U << 8U;
    g_sciTransfer_t[2U].tx_length = 0U;
	g_sciTransfer_t[2U].rx_length = 0U;

    /** - Finaly start SCI3 */
    sciREG3->GCR1 |= 0x80U;




/* USER CODE BEGIN (3) */
    // sciREG3->SETINT |= (uint32)(((uint32)1U << 16U) | ((uint32)1U << 8U));  /* SET TX DMA / SET TX INT*/
/* USER CODE END */
}

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

    您好、Hongbo、

    刚才我使用"Docklight"工具进行了测试、如果我在控制器上启用奇偶校验、我也观察到了同样的行为(即、无论工具侧启用奇偶校验、该工具都在检测数据)。

    但您是否测试了以下条件?

    请勿在控制器侧启用奇偶校验、在工具侧启用奇偶校验、否则通信应失败。

    我的意思是、只要控制器在启用奇偶校验时从其输出生成奇偶校验、如果可能、使用 CRO 检查控制器 SCI 输出或具有奇偶校验和不具有奇偶校验的逻辑分析仪、 如果启用了奇偶校验、则应在每个字符的末尾添加奇偶校验位。

    --

    谢谢、此致、

    Jagadish。

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

    你好,Jagadish

    情况是,无论我启用了奇偶校验还是不在控制器(带 HalCoGen)上,工具端都可以在没有奇偶校验选项的情况下正确接收数据,并且无法在工具端使用奇偶校验选项接收正确的数据。

    我想奇偶校验位不会在控制器端生成?

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

    I Hongbo,

    我将随附我的代码、它正在工作。 只需尝试将此代码与您的代码进行比较、并让我知道您是否发现任何差异。

    e2e.ti.com/.../SCI_5F00_PARITY_5F00_LC4357.zip

    --

    谢谢、此致、
    Jagadish。