所用芯片:TM4C1294NCPDT
所用模塊:W25Q16
以下爲初始化SSI2的函數:
void W25QXX_Init_2(void)//初始化SSI2
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2);//使能SPI2時鐘
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);//使能GPIOD時鐘
SysCtlPeripheralReset(SYSCTL_PERIPH_SSI2);
//SPI2 IO 口定義
GPIOPinConfigure(GPIO_PD3_SSI2CLK);
GPIOPinConfigure(GPIO_PD0_SSI2XDAT1);//MISO
GPIOPinConfigure(GPIO_PD1_SSI2XDAT0);//MOSI
GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3);
SSIConfigSetExpClk(SSI2_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,SSI_MODE_MASTER, 1000000, 8);
SSIEnable(SSI2_BASE);//使能SPI2
uint32_t dummy[1];
while(SSIDataGetNonBlocking(SSI2_BASE, &dummy[0]));
GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_2);//PD2爲片選
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_2, 0xFF);
}
此處應注意兩點,一是配置時鐘極性和相位時,主設備的時鐘極性和相位與從設備
的時鐘和相位正好相反。此處W25Q16模塊,查看其對應手冊可知,該模塊時鐘線
在空閒時爲高電平(即CPOL Clock Polarity 爲1),在SCK第二個跳變研採樣(CPHA
Clock Phase爲1),即mode3模式,那麼對應的主機配置時就應該選擇mode0模式。
二是時鐘取系統時鐘,但是SysCtlClockGet()函數好像有點問題,大家可以試試
ROM_SysCtlClockGet()函數來獲取系統時鐘,如果這個也不行就只能自己配置系
統時鐘。
後續的關於W25Q16的具體讀寫操作函數就不贅述了,如有需要可以私信我。