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.

[参考译文] TM4C123GH6PM:Tiva-C 上的 SPI 通信和 FSS 处理

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1263695/tm4c123gh6pm-spi-communications-and-handling-of-fss-on-the-tiva-c

器件型号:TM4C123GH6PM

您好!

我在 tm4c123上对 SPI 外设进行初始化、如下所示:

   // SSI0初始化
   SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);
   SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

   GPIOPinConfigure (GPIO_PA2_SSI0CLK);
   GPIOPinConfigure (GPIO_PA3_SSI0FSS);
   GPIOPinConfigure (GPIO_PA4_SSI0RX);
   GPIOPinConfigure (GPIO_PA5_SSI0TX);
   GPIOPinTypeSSI (GPIO_Porta_base、GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 | GPIO_PIN_2);
   SSIConfigSetExpClk (SSI0_BASE、SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_MODE_0、SSI_MODE_MASTER、4000000、 8);
   SSIEnable (SSI0_BASE);

我希望能够自动处理 FSS。 但是、我无法从 SPI 传感器读取结果、未成功删除 GPIOPinConfigure (GPIO_PA3_SSI0FSS);语句、并将 PA4配置为 GPO 端口、自行处理 SPI 的 CS。

以下是读取和写入寄存器函数:

void writeReg (uint8_t addr、uint8_t data){

   uint32_t 虚拟[1];

   addr = addr & 0x7F;

   GPIOPinWrite (GPIO_PORTA_BASE、GPIO_PIN_3、0x00);

   SSIDataPut (SSI0_BASE、addr);
   SSIDataPut (SSI0_BASE、DATA);
   while (SSIBusy (SSI0_BASE);

   GPIOPinWrite (GPIO_PORTA_BASE、GPIO_PIN_3、GPIO_PIN_3);

   while (SSIDataGetNonBlocking (SSI0_BASE、&dume[0]);



uint8_t readReg (uint8_t addr){

   uint32_t 虚拟[1];
   uint32_t 数据;

   addr = addr | 0x80;

   GPIOPinWrite (GPIO_PORTA_BASE、GPIO_PIN_3、0x00);

   SSIDataPut (SSI0_BASE、addr);
   SSIDataGet (SSI0_BASE、&dume[0]);
   SSIDataPut (SSI0_BASE、0x00);
   SSIDataGet (SSI0_BASE、&data);

   while (SSIBusy (SSI0_BASE);
   GPIOPinWrite (GPIO_PORTA_BASE、GPIO_PIN_3、GPIO_PIN_3);

   while (SSIDataGetNonBlocking (SSI0_BASE、&dume[0]);

   返回(uint8_t)(DATA & 0xFF);


虽然它们现在可以正常工作、但在什么情况下我们不必 自己管理 SPI 外设的 CS? 对于每个 SPI Get Put 语句、FSS 是否会下降到低水平? 请注意、要从寄存器读取、我将首先放置地址字节、然后获取一个字节、然后上拉 CS 行。

此致、

C.A.

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

    您好 CAN、

    [quote userid="91011" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1263695/tm4c123gh6pm-spi-communications-and-handling-of-pipinConfigure(GPIO_PA3_SSI0FSS);语句并将配置为 GPO 端口,自行处理 fss 的 CS。

    是的、使用 GPIO 端口移交 CS 是最稳健的方法。 我会向客户推荐这款产品。 在每次字传输时、TM4C123上的 FSS 引脚都会失效(将其升高至高电平)。 有关详细信息、请参阅数据表。 以下是摘录。 话虽如此、在 TM4C129 MCU 上提供的一项特性是能够在连续传输期间将 FSS 保持为低电平有效、直到其被应用停止。 但对于 TM4C123、情况并非如此。  

    在连续的背对背传输中、必须通过传输 SSInFss 信号
    每个数据字传输之间为高电平、因为从器件选择引脚在其串行
    外设寄存器、如果 SPH 位被清零、则不允许更改该位。 因此、主器件
    器件必须在每次数据传输之间将从器件的 SSInFss 管脚拉高、以使能
    串行外设数据写入。 连续传输完成后、将返回 SSInFss 引脚
    将在捕获到最后一个位后的一个 SSInClk 周期内恢复到其空闲状态。