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.

[参考译文] RM57L843:TPS65381AQDAPRQ1 - SPI 配置和通信

Guru**** 2516170 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/1366931/rm57l843-tps65381aqdaprq1---spi-configuration-and-communication

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

工具与软件:

我认为在配置 SPI 以便与 TPS65381AQDAPRQ1进行通信时遇到了问题。 我认为我已经配置了一切正常、但它不起作用...
我在调用 main ()之前把 SPI 配置放在_c_int00函数中,配置代码看起来像这样。

    uint32_t i = 3000000;

    for(;i>0;) {
        i--;
    }
    /* Return control and status register values to default */
    mibspiREG2->GCR0 = 0u;

    /* Bring MIBSPI channel out of reset */
    mibspiREG2->GCR0 = 1u;

    /* Data format 0 */
    mibspiREG2->FMT0 = (uint32)((uint32)0U << 24U)                 /* wdelay */
                           | (uint32)((uint32)0U << 23U)                 /* parity Polarity */
                           | (uint32)((uint32)0U << 22U)                 /* parity enable */
                           | (uint32)((uint32)0U << 21U)                 /* wait on enable */
                           | (uint32)((uint32)0U << 20U)                 /* shift direction */
                           | (uint32)((uint32)0U << 17U)       /* clock polarity */
                           | (uint32)((uint32)0U << 16U)          /* clock phase */
                           | (uint32)((uint32)19 << 8U)            /* baudrate prescale - derive SPICLK from VCLK
                                                                            @note: the clock rate (MHz) for data format x can be calculated: VCLK (80MHz) / (PRESCALEx + 1) */
                           | (uint32)((uint32)16U << 0U);                 /* data word length */

    /* Initialize port - set pins as functional */
    mibspiREG2->PC0  = 0u;
    mibspiREG2->PC0  = mibspiREG2->PC0
                           | (uint32)((uint32)1U << 25U)                  /* SOMI[1] */
                           | (uint32)((uint32)1U << 17U)                  /* SIMO[1] */
                           | (uint32)((uint32)1U << 11U)                  /* SOMI[0] */
                           | (uint32)((uint32)1U << 10U)                  /* SIMO[0] */
                           | (uint32)((uint32)1U << 9U)                   /* CLK */
                           | (uint32)((uint32)0U << 8U)                   /* ENA */
                           | (uint32)((uint32)1U << 5U)                   /* SCS[5] */
                           | (uint32)((uint32)1U << 4u)                   /* SCS[4] */
                           | (uint32)((uint32)1U << 3u)                   /* SCS[3] */
                           | (uint32)((uint32)1U << 2u)                   /* SCS[2] */
                           | (uint32)((uint32)1U << 1u)                   /* SCS[1] */
                           | (uint32)((uint32)1U << 0u);                  /* SCS[0] */

    /* Chosen SPI start in master mode */
    mibspiREG2->GCR1 = mibspiREG2->GCR1
                           | (uint32_t)((uint32_t)1U << 24U)               /* SPIEN */
                           | (uint32_t)((uint32_t)0U << 16U)               /* LOOPBACK */
                           | (uint32_t)((uint32_t)0U << 8U)                /* POWERDOWN */
                           | (uint32_t)((uint32_t)1U << 1U)                /* CLKMOD */
                           | (uint32_t)((uint32_t)1U << 0U);               /* MASTER */

    uint8_t chip_select = 0xFD;
    while(((mibspiREG2->BUF) & 0x20000000) != 0u){
                    /* wait for the TXFULL bit to be reset before writing new data to SPIDAT1 register
                     * @note: 0 - transmit buffer is empty, ready to accept a new data
                     *        1 - transmit buffer is full, not ready to accept new data */
                }
    mibspiREG2->DAT1 = ((uint32_t)0U << 28u)
                       | ((uint32_t)63U << 26u)
                       | ((uint32_t)0U << 24u)
                       | ((uint32_t)chip_select << 16u)
                       | ((uint32_t)49152U);

    while(((mibspiREG2->BUF) & 0x80000000u) != 0u){
                    /* wait for the RXEMPTY bit to be reset before reading the SPIBUF register
                     * @note: 0 - new data has been received and copied into RXDATA
                     *        1 - no data has been received since the last read of RXDATA */
                }

    PMIC_VAL = (uint32_t)mibspiREG2->BUF;

使用 示波器查看信号似乎 CS 像我想的那样无法正常工作。 TPS65381要求 Us 之间的消息停用 CS。 我的理解是 CS 在每条消息后停用为默认状态,除非设置了 CS_HOLD (对我来说不是)。 需要注意的是、SPI 旨在以兼容模式使用、但之后我们将过渡到 MiBSPI。

您能告诉我我在这里做了什么可能是错误的,我不能与 TPS65381AQDAPRQ1正常通信.

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

    您好、Filip、

    Unknown 说:
    我的理解是,除非设置了 CS_HOLD,否则 CS 将在每条消息后停用为默认状态,这对我来说不是。 [/报价]

    您的理解是正确的。

    初始化看起来有所不同、如何获得该初始化代码? 是否未使用 HALCoGen 生成代码?

    在您的项目中、您只需要 SOMI[0]、SIMO[0]、CS[0]和 CLK,但您要在所有其他引脚上启用该功能?

    此外、还缺少多缓冲模式选择、传输组初始化等其他初始化。

    请参阅以下示例工程:

    (+)[常见问题解答] TMS570LC4357:适用于 Hercules 控制器的示例和演示(例如 TMS570x、RM57x 和 RM46x 等)-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    在上面的常见问题解答中、您可以找到几个经过测试的 MibSPI 示例:

    --
    谢谢。此致、
    Jagadish。

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

    你好、jagadish、

    您的初始化看起来不同,如何获得初始化代码? 是否未使用 HALCoGen 生成代码?

    我一开始尝试了使用 HALCoGen、但我认为配置有问题、这导致了我的问题。 因此、我试着从 hl_mibspi.c 中删除我认为需要的所有内容、以使其正常工作、但我的问题仍然存在。 我将其他所有内容都设置为默认值、因为我们目前还没有使用 MiBSPI 中的所有优秀内容。

    在您的项目中,您只需要 SOMI[0]、SIMO[0]、CS[0]和 CLK,但您正在启用所有其他引脚上的功能?

    我们有2个连接到 SPI2的外设。 CS[0]是温度传感器,CS[1]是我现在感兴趣的 TPS65381AQDAPRQ1。

    感谢您的快速响应、我将查看您提供的示例。

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

    您好、Filip、

    感谢您快速回复,我将查看您提供的示例。

    太好了、只要仔细查看它们、并告诉我、以防您需要任何进一步的帮助。

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

    我的 SPI 配置中存在问题、最后我可以配置  TPS65381AQDAPRQ1。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的 SPI 配置中出现问题,最终我可以配置  TPS65381AQDAPRQ1。

    很高兴听到您现在可以配置它。