SPIFLASH之W25Q16模塊應用在TM4C1294上

所用芯片: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的具體讀寫操作函數就不贅述了,如有需要可以私信我。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章