您好!
我在 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.