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.

[参考译文] CCS/TM4C123GH6PM:Tiva C 系列 TM4C123G Launchpad 关于常规操作和编程的 SSI 问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/769682/ccs-tm4c123gh6pm-tiva-c-series-tm4c123g-launchpad-ssi-questions-about-general-operation-and-programming

器件型号:TM4C123GH6PM

工具/软件:Code Composer Studio

您好!  

首先、我要说 的是、我是 TM4C123G Launchpad 的新手、仍然是 C 编码的初学者。 我是一名大学生、刚刚完成了使用 PIC 微控制器的课程。 我将 TM4C123G (在 CCS 中进行编程)用于我的高级项目、这感觉与使用 MPLAB 和 PICS 有了巨大的飞跃。 我已经阅读了数据表中有关 SSI 的所有内容、并从 Tiva C 库中的 SSI.C 函数中了解了我可以获得的内容、但我确实有一些问题、我找不到答案:

在向 SSI 数据寄存器写入/读取数据时、SSI 模块是否自动执行飞思卡尔 SPI 格式(时钟、SSInFss、Rx、Tx)? 对于 PIC、我必须手动设置芯片选择并发送虚拟字节、以便在读取数据时保持时钟运行。 从我在 Tiva 数据表中看到的内容来看、 TM4C123G 似乎为我完成了所有这些工作。

2.对于我的项目,我需要接收大量字节的连续数据。 可能高达64字节、这对我来说很重要、因为我在 PIC 课程中连续传输/读取的最大数据大约为2-3字节。 我对 SSI 的理解是、我只需发送数据、其中包括地址、R/W 和从从从器件读取数据的命令、然后从数据寄存器读取接收到的数据。 假设这是正确的、如果我需要接收连续数据、我是否只需背靠背地从数据寄存器读取数据?

例如、在我的项目中、我需要使用 SPI 与 USB 主机控制器(VDIP1)进行通信。 我必须发送3个单独的传输、以告诉它发回固件版本等信息。 然后、它会向我发送大量数据流。 (在我当前的技能水平下、我经常考虑一句数据)。 如何连续读取? 在 VDIP1完成发送之前、我可以在环路上或背靠背使用 SSIDataGet 函数吗? 例如、以下代码能否正常工作? (假设 SSI 模块已正确配置并启用。 忽略语法问题、因为这只是代码的一个假设性部分)我只想知道我是否走上了正确的轨道。

 //这些只是任意值。 假设这是我需要发送到主机控制器以读取数据的三个值。

SSIDataPut (SSI0_BASE、0x9F);   

SSIDataPut (SSI0_BASE、0x9F);

SSIDataPut (SSI0_BASE、0x9F);

//I 稍后将确定 while 环路。 我还没有考虑如何检查我是否已经接收到数据。

while (<b)

SSIDataGet (SSI0_BASE、 * pu32Data);

*pui32Data ++;

A++;

3.如果我做了上述的事情,我是否能够读取连续的数据流? SSI 模块是否自动对 SSInFss 进行脉冲。 如果我这么做、时钟会继续运行吗?

我感谢您的任何回答。 不过,我想请你尽可能地把它倒在我身上。 仍然学习有关微控制器和 C 代码的大量技术语言。

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

    [引用用户="Bryan Holland "]1. 当我向 SSI 数据寄存器写入/读取数据时、SSI 模块是否自动执行飞思卡尔 SPI 格式(时钟、SSInFss、Rx、Tx)? 对于 PIC、我必须手动设置芯片选择并发送虚拟字节、以便在读取数据时保持时钟运行。 从我在 Tiva 数据表中看到的内容来看、 TM4C123G 似乎为我执行所有这些操作。[/QUERP]

    是的、您的理解是正确的。 我建议您从 TivaWare SSI 示例开始。 您可以在中找到示例 /examples/peripherals/ssi. 另请参阅 TivaWare driverlib 用户指南、而不是通过 SSI.c 来查找所有 API 的用法。 以下是用户指南、以防您未找到它。  

     在第二个问题上、您处于正确的轨道上。 您将使用 SSIIntStatus() API 查询 SSIRIS 寄存器,以确定接收到的 FIFO 中是否仍有数据。 如果是、您将继续阅读。 您可以考虑使用中断模式。 为简单起见、您可以先从轮询模式开始。 另请注意、传递给 SSIDATGet 的第二个参数是指针。 如果 您的 pui32Data 已经是指针、则无需对其进行解引用。  

    [引述 USER="Bryan Holland "> SSI 模块是否自动对 SSInFss 进行脉冲。 如果我这么做、时钟会继续运行吗?[/quot]

    是的、SSI 模块将在帧之间自动取消置位。 如果您继续读取、则可能会在帧之间的 SSInFss 轻微失效。 最好是使用示波器观察正在发生的情况。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    让我稍微修改一下我的答案。 由于您是主器件、因此您将向您的外部从器件生成 SPICLK。 您应该知道您需要从从从器件读取多少数据。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    查尔斯

    感谢您的回答。 我有一些后续问题。

    是否要说 SSIDataGet 中的第二个参数只需输入指针的名称,而不是实际使用"*pui32Data"?

    至于主器件、当你说我将生成 SPICLK 时、SSI 模块在我对数据寄存器进行读/写操作后是否仍然会自动生成时钟?

    我昨天晚上发现了一些东西。 我正在与之通信的从器件期望 CS 保持高电平。 在主机上的所有 SSI 模式中、SSInFss 保持高电平并保持低电平进行发送。 是否有办法手动控制 SSInFss 或 TM4C123G 中的另一个芯片选择选项。 目前、我的攻击计划是仅在 CS 引脚上使用逆变器。

    此致、

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

    [引用 user="Bryan Holland "]是否在 SSIDataGet 中说第二个参数只需输入指针的名称,而不是实际使用"*pui32Data"?
    [/报价]

    正确。

    [引用用户="Bryan Holland ">至于主设备、当您说我要生成 SPICLK 时、SSI 模块在我读/写数据寄存器后是否仍然自动生成时钟?
    [/报价]

    当您写入数据寄存器时、它将启动 SSI 传输、如果您是主器件、该传输将生成 SPICLK。 从数据寄存器中读取数据仅读取数据 RXFIFO。 它不会生成 SPICLK。 您将需要在 TX 上创建一些假写入、以便将 SPICLK 生成给您的从器件。 通信是全双工的。 您的从设备应该知道、在将数据返回到主设备时、它可以忽略来自主设备的这些虚拟字节。  

    [引用 user="Bryan Holland ">我与之通信的从设备预计 CS 将保持高电平。 [/报价]

    您可以在电路板上添加逆变器、也可以使用 GPIO 作为从器件的 CS。