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.

[参考译文] MSPM0G3507:我可以使用 SPI SPI_CONTROLLER_multibyte_fifo_poll 示例传输更多字节吗?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1453836/mspm0g3507-can-i-transmit-more-bytes-using-spi-spi_controller_multibyte_fifo_poll-example

器件型号:MSPM0G3507

工具与软件:

嗨、团队:  

我正在查看 spi_controller_multibyte_fifo_pol_lp_MSPM0G3507示例。 如何多于4字节的数据传输? 在 FIFO 示例中、我可以传输的最大数据字节为5字节。 为什么会这样?

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define SPI_PACKET_SIZE (8)
/* Data for SPI to transmit */
uint8_t gTxPacket[SPI_PACKET_SIZE] = {'M', 'S', 'P', '!', 'M', 'S', 'P', '!'};
/* Data received from SPI Peripheral */
volatile uint8_t gRxPacket[SPI_PACKET_SIZE];
int main(void)
{
SYSCFG_DL_init();
/* Fill TX FIFO with data and transmit to SPI Peripheral */
DL_SPI_fillTXFIFO16(SPI_0_INST, &gTxPacket[0], SPI_PACKET_SIZE);
/* Wait until all bytes have been transmitted and the TX FIFO is empty */
while (DL_SPI_isBusy(SPI_0_INST))
;
/*
* Wait to receive the SPI data
* This loop expects SPI_PACKET_SIZE bytes
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

非常感谢  

Matthew Chen

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

    您是说它不传输它显示的8个信号?

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

    尊敬的 Keith:

    是的、它仅传输前5个字节被传输。 我检查了 示波器。 我有什么错吗?

    Matthew

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

    您是否连接了另一个作为外设的器件?

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

    尊敬的 Keith:

    是的、我使用另一个具有 spi_peripheral_echo_interrupts_lp_MSPM0G3507_nortos_ticlang 的电路板闪存。 同样只获得5个字节

    Matthew  

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

    请查看我使用的工程

    e2e.ti.com/.../spi_5F00_controller_5F00_periphial_5F00_echo_5F00_interrupts_5F00_LP_5F00_MSPM0G3507_5F00_nortos_5F00_ticlang.zip

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

    您看到此评论了吗?

    /*
     * SPI 数据包大小的字节数
     *数据包将由 SPI 控制器传输。
     *本示例使用 FIFO 进行轮询、FIFO 大小上限为4。
     *请参阅中断示例以处理较大的数据包。
     */
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我是说有任何方法可以传输超过4字节、比如8字节? 此外、我感到困惑、因为最大值为4字节。 我可以得到5个字节的原因是什么?

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

    我想它像是 UART TX 缓冲器。 一旦您开始加载该字节、第一个字节*立即*进入 SPI TX 缓冲区并开始传输。 然后您填充 FIFO 的其他4个字节。

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

    要获得超过4字节、您需要按规定忙等待或使用中断。 大脑获取8个字节的方法是:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /* Fill TX FIFO with data and transmit to SPI Peripheral */
    DL_SPI_fillTXFIFO8(SPI_0_INST, &gTxPacket[0], SPI_PACKET_SIZE);
    /* Wait until all bytes have been transmitted and the TX FIFO is empty */
    while (DL_SPI_isBusy(SPI_0_INST))
    ;
    /* Fill TX FIFO with data and transmit to SPI Peripheral */
    DL_SPI_fillTXFIFO8(SPI_0_INST, &gTxPacket2[0], SPI_PACKET_SIZE);
    /* Wait until all bytes have been transmitted and the TX FIFO is empty */
    while (DL_SPI_isBusy(SPI_0_INST))
    ;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    您也可以执行以下操作:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    for (i = 0; i < PACKETSIZE; i++)
    {
    while (DL_SPI_isTXFIFOFull (SPI_0_INST))
    ;
    // Put data into fifo
    DL_SPI_fillTXFIFO8(SPI_0_INST, &gTxPacket[i], 1);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    尊敬的 Keith:

    非常感谢您的回答。 这很有帮助。

    Matthew