工具与软件:
Im 尝试遵循数据表中的此注释、
如果通过 SSICR0寄存器的 SPO 位将 SSIClk 信号设置为稳态高电平、软件还必须将与 SSInClk 信号相对应的 GPIO 端口管脚配置为 GPIO 上拉选择寄存器(GPIOPUR)中的上拉电阻。
这些行没有给我所需的结果、GPIOPUR 寄存器设置了位0、并在接下来的代码行中复位为0。
GPIOUnlockPin (GPIO_PORTQ_BASE、GPIO_PIN_0);//针对提交寄存器的写入访问解锁该引脚
GPIOPadConfigSet (GPIO_PORTQ_BASE、GPIO_PIN_0、GPIO_STENCE_2mA、GPIO_PIN_TYPE_STD_WPU);
我还尝试了直接操作寄存器、
HWREG (GPIO_PORTQ_BASE + GPIO_LOCK)= GPIO_LOCK_KEY;
HWREG (GPIO_PORTQ_BASE + GPIO_CR)|= GPIO_PIN_0;
HWREG (GPIO_PORTQ_BASE + GPIO_PUR)|= GPIO_PIN_0;
这是 SPI 模块初始化的一个片段、该模块配置为模式3、SPO = 1、SPH = 1。
完整代码、
void clock_init (){
ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_CFG_VCO_160)、40000000);
}
void spi_init (){
/*
* 360 NW 使用 TM4CNCPDT 控制器的 SSI3模块
*默认情况下、只有 SPI 模式可以在 SST26VF032B SPI 闪存中使用
* SST26VF032B/SST26VF032BA ->最大时钟104 MHz / 80 MHz
*/
clock_init();
SysCtlPeripheralEnable (SYSCTL_PERIPH_GPIOQ);
while (! SysCtlPeripheralReady (SYSCTL_PERIPH_GPIOQ));//等待启用
GPIOPinConfigure (GPIO_PQ0_SSI3CLK);
GPIOPinConfigure (GPIO_PQ1_SSI3FSS);
GPIOPinConfigure (GPIO_P2_SSI3XDAT0);//Tx
GPIOPinConfigure (GPIO_PQ3_SSI3XDAT1);//GPIOPinConfigure Rx
SysCtlPeripheralEnable (SYSCTL_PERIPH_SSI3);
while (! SysCtlPeripheralReady (SYSCTL_PERIPH_SSI3));//等待启用
GPIOUnlockPin (GPIO_PORTQ_BASE、GPIO_PIN_0);//针对提交寄存器的写入访问解锁该引脚
//使用设备锁定密钥解锁端口
//
// HWREG (GPIO_PORTQ_BASE + GPIO_LOCK)= GPIO_LOCK_KEY;
//
////
//提交引脚以保持 GPIO 模式
////
// HWREG (GPIO_PORTQ_BASE + GPIO_CR)|= GPIO_PIN_0;
//
// HWREG (GPIO_PORTQ_BASE + GPIO_PUR)|= GPIO_PIN_0;
//以确保下降沿的时钟是尖锐的、因为在 SPI 闪存中上拉了 SCK
GPIOPadConfigSet (GPIO_PORTQ_BASE、GPIO_PIN_0、GPIO_STENCE_2mA、GPIO_PIN_TYPE_STD_WPU);
GPIOPinTypeSSI (GPIO_PORTQ_BASE、GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
SSIConfigSetExpClk (SSI3_BASE、ui32SysClock、SSI_FRF_MOTO_MODE_3、SSI_MODE_MASTER、10000000、 8);
SSIEnable (SSI3_BASE);
}
如何解决该问题?