123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903 |
- #include "stm32f4xx_qspi.h"
- #if defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx) || defined(STM32F469_479xx)
- #define QSPI_CR_CLEAR_MASK 0x00FFFFCF
- #define QSPI_DCR_CLEAR_MASK 0xFFE0F7FE
- #define QSPI_CCR_CLEAR_MASK 0x90800000
- #define QSPI_PIR_CLEAR_MASK 0xFFFF0000
- #define QSPI_LPTR_CLEAR_MASK 0xFFFF0000
- #define QSPI_CCR_CLEAR_INSTRUCTION_MASK 0xFFFFFF00
- #define QSPI_CCR_CLEAR_DCY_MASK 0xFFC3FFFF
- #define QSPI_CR_CLEAR_FIFOTHRESHOLD_MASK 0xFFFFF0FF
- #define QSPI_CR_INTERRUPT_MASK 0x001F0000
- #define QSPI_SR_INTERRUPT_MASK 0x0000001F
- #define QSPI_FSR_INTERRUPT_MASK 0x0000001B
-
- void QSPI_DeInit(void)
- {
-
- RCC_AHB3PeriphResetCmd(RCC_AHB3Periph_QSPI, ENABLE);
-
- RCC_AHB3PeriphResetCmd(RCC_AHB3Periph_QSPI, DISABLE);
- }
- void QSPI_StructInit(QSPI_InitTypeDef* QSPI_InitStruct)
- {
-
- QSPI_InitStruct->QSPI_SShift = QSPI_SShift_NoShift ;
-
- QSPI_InitStruct->QSPI_Prescaler = 0 ;
-
- QSPI_InitStruct->QSPI_CKMode = QSPI_CKMode_Mode0 ;
-
- QSPI_InitStruct->QSPI_CSHTime = QSPI_CSHTime_1Cycle ;
-
- QSPI_InitStruct->QSPI_FSize = 0 ;
-
- QSPI_InitStruct->QSPI_FSelect = QSPI_FSelect_1 ;
-
- QSPI_InitStruct->QSPI_DFlash = QSPI_DFlash_Disable ;
- }
- void QSPI_ComConfig_StructInit(QSPI_ComConfig_InitTypeDef* QSPI_ComConfig_InitStruct)
- {
-
-
- QSPI_ComConfig_InitStruct->QSPI_ComConfig_DDRMode = QSPI_ComConfig_DDRMode_Disable ;
-
- QSPI_ComConfig_InitStruct->QSPI_ComConfig_DHHC = QSPI_ComConfig_DHHC_Disable ;
-
- QSPI_ComConfig_InitStruct->QSPI_ComConfig_SIOOMode = QSPI_ComConfig_SIOOMode_Disable ;
-
- QSPI_ComConfig_InitStruct->QSPI_ComConfig_FMode = QSPI_ComConfig_FMode_Indirect_Write ;
-
- QSPI_ComConfig_InitStruct->QSPI_ComConfig_DMode = QSPI_ComConfig_DMode_NoData ;
-
- QSPI_ComConfig_InitStruct->QSPI_ComConfig_DummyCycles = 0 ;
-
- QSPI_ComConfig_InitStruct->QSPI_ComConfig_ABSize = QSPI_ComConfig_ABSize_8bit ;
-
- QSPI_ComConfig_InitStruct->QSPI_ComConfig_ABMode = QSPI_ComConfig_ABMode_NoAlternateByte ;
-
- QSPI_ComConfig_InitStruct->QSPI_ComConfig_ADSize = QSPI_ComConfig_ADSize_8bit ;
-
- QSPI_ComConfig_InitStruct->QSPI_ComConfig_ADMode = QSPI_ComConfig_ADMode_NoAddress ;
-
- QSPI_ComConfig_InitStruct->QSPI_ComConfig_IMode = QSPI_ComConfig_IMode_NoInstruction ;
-
- QSPI_ComConfig_InitStruct->QSPI_ComConfig_Ins = 0 ;
- }
- void QSPI_Init(QSPI_InitTypeDef* QSPI_InitStruct)
- {
- uint32_t tmpreg = 0;
-
-
- assert_param(IS_QSPI_SSHIFT(QSPI_InitStruct->QSPI_SShift));
- assert_param(IS_QSPI_PRESCALER(QSPI_InitStruct->QSPI_Prescaler));
- assert_param(IS_QSPI_CKMODE(QSPI_InitStruct->QSPI_CKMode));
- assert_param(IS_QSPI_CSHTIME(QSPI_InitStruct->QSPI_CSHTime));
- assert_param(IS_QSPI_FSIZE(QSPI_InitStruct->QSPI_FSize));
- assert_param(IS_QSPI_FSEL(QSPI_InitStruct->QSPI_FSelect));
- assert_param(IS_QSPI_DFM(QSPI_InitStruct->QSPI_DFlash));
-
-
-
- tmpreg = QUADSPI->CR;
-
- tmpreg &= QSPI_CR_CLEAR_MASK;
-
- tmpreg |= (uint32_t)(((QSPI_InitStruct->QSPI_Prescaler)<<24)
- |(QSPI_InitStruct->QSPI_SShift)
- |(QSPI_InitStruct->QSPI_FSelect)
- |(QSPI_InitStruct->QSPI_DFlash));
-
- QUADSPI->CR = tmpreg;
-
-
-
- tmpreg = QUADSPI->DCR;
-
- tmpreg &= QSPI_DCR_CLEAR_MASK;
-
- tmpreg |= (uint32_t)(((QSPI_InitStruct->QSPI_FSize)<<16)
- |(QSPI_InitStruct->QSPI_CSHTime)
- |(QSPI_InitStruct->QSPI_CKMode));
-
- QUADSPI->DCR = tmpreg;
- }
- void QSPI_ComConfig_Init(QSPI_ComConfig_InitTypeDef* QSPI_ComConfig_InitStruct)
- {
- uint32_t tmpreg = 0;
-
- assert_param(IS_QSPI_FMODE (QSPI_ComConfig_InitStruct->QSPI_ComConfig_FMode));
- assert_param(IS_QSPI_SIOOMODE (QSPI_ComConfig_InitStruct->QSPI_ComConfig_SIOOMode));
- assert_param(IS_QSPI_DMODE (QSPI_ComConfig_InitStruct->QSPI_ComConfig_DMode));
- assert_param(IS_QSPI_DCY (QSPI_ComConfig_InitStruct->QSPI_ComConfig_DummyCycles));
- assert_param(IS_QSPI_ABSIZE (QSPI_ComConfig_InitStruct->QSPI_ComConfig_ABSize));
- assert_param(IS_QSPI_ABMODE (QSPI_ComConfig_InitStruct->QSPI_ComConfig_ABMode));
- assert_param(IS_QSPI_ADSIZE (QSPI_ComConfig_InitStruct->QSPI_ComConfig_ADSize));
- assert_param(IS_QSPI_ADMODE (QSPI_ComConfig_InitStruct->QSPI_ComConfig_ADMode));
- assert_param(IS_QSPI_IMODE (QSPI_ComConfig_InitStruct->QSPI_ComConfig_IMode));
- assert_param(IS_QSPI_INSTRUCTION (QSPI_ComConfig_InitStruct->QSPI_ComConfig_Ins));
- assert_param(IS_QSPI_DDRMODE (QSPI_ComConfig_InitStruct->QSPI_ComConfig_DDRMode));
- assert_param(IS_QSPI_DHHC (QSPI_ComConfig_InitStruct->QSPI_ComConfig_DHHC));
-
-
-
- tmpreg = QUADSPI->CCR;
-
- tmpreg &= QSPI_CCR_CLEAR_MASK;
-
- tmpreg |= (uint32_t)( (QSPI_ComConfig_InitStruct->QSPI_ComConfig_FMode)
- | (QSPI_ComConfig_InitStruct->QSPI_ComConfig_DDRMode)
- | (QSPI_ComConfig_InitStruct->QSPI_ComConfig_DHHC)
- | (QSPI_ComConfig_InitStruct->QSPI_ComConfig_SIOOMode)
- | (QSPI_ComConfig_InitStruct->QSPI_ComConfig_DMode)
- | (QSPI_ComConfig_InitStruct->QSPI_ComConfig_ABSize)
- | (QSPI_ComConfig_InitStruct->QSPI_ComConfig_ABMode)
- | (QSPI_ComConfig_InitStruct->QSPI_ComConfig_ADSize)
- | (QSPI_ComConfig_InitStruct->QSPI_ComConfig_ADMode)
- | (QSPI_ComConfig_InitStruct->QSPI_ComConfig_IMode)
- | (QSPI_ComConfig_InitStruct->QSPI_ComConfig_Ins)
- |((QSPI_ComConfig_InitStruct->QSPI_ComConfig_DummyCycles)<<18));
-
- QUADSPI->CCR = tmpreg;
- }
- void QSPI_Cmd(FunctionalState NewState)
- {
-
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- {
-
- QUADSPI->CR |= QUADSPI_CR_EN;
- }
- else
- {
-
- QUADSPI->CR &= ~ QUADSPI_CR_EN;
- }
- }
- void QSPI_AutoPollingMode_Config(uint32_t QSPI_Match, uint32_t QSPI_Mask , uint32_t QSPI_Match_Mode)
- {
-
- assert_param(IS_QSPI_PMM(QSPI_Match_Mode));
- if ((QUADSPI->SR & QUADSPI_SR_BUSY) == RESET)
-
- {
-
- QUADSPI->PSMAR = QSPI_Match ;
-
- QUADSPI->PSMKR = QSPI_Mask ;
-
-
- if(QSPI_Match_Mode)
-
- {
-
- QUADSPI->CR |= QUADSPI_CR_PMM;
- }
- else
-
- {
-
- QUADSPI->CR &= ~ QUADSPI_CR_PMM;
- }
- }
- }
- void QSPI_AutoPollingMode_SetInterval(uint32_t QSPI_Interval)
- {
- uint32_t tmpreg = 0;
-
-
- assert_param(IS_QSPI_PIR(QSPI_Interval));
- if ((QUADSPI->SR & QUADSPI_SR_BUSY) == RESET)
-
- {
-
- tmpreg = QUADSPI->PIR ;
-
- tmpreg &= QSPI_PIR_CLEAR_MASK ;
-
- tmpreg |= QSPI_Interval;
-
- QUADSPI->PIR = tmpreg;
- }
- }
- void QSPI_MemoryMappedMode_SetTimeout(uint32_t QSPI_Timeout)
- {
- uint32_t tmpreg = 0;
-
-
- assert_param(IS_QSPI_TIMEOUT(QSPI_Timeout));
- if ((QUADSPI->SR & QUADSPI_SR_BUSY) == RESET)
-
- {
-
- tmpreg = QUADSPI->LPTR ;
-
- tmpreg &= QSPI_LPTR_CLEAR_MASK ;
-
- tmpreg |= QSPI_Timeout;
-
- QUADSPI->LPTR = tmpreg;
- }
- }
- void QSPI_SetAddress(uint32_t QSPI_Address)
- {
- if((QUADSPI->SR & QUADSPI_SR_BUSY) == RESET)
-
- {
-
- QUADSPI->AR = QSPI_Address;
- }
- }
- void QSPI_SetAlternateByte(uint32_t QSPI_AlternateByte)
- {
- if((QUADSPI->SR & QUADSPI_SR_BUSY) == RESET)
-
- {
-
- QUADSPI->ABR = QSPI_AlternateByte;
- }
- }
- void QSPI_SetFIFOThreshold(uint32_t QSPI_FIFOThreshold)
- {
- uint32_t tmpreg = 0;
-
-
- assert_param(IS_QSPI_FIFOTHRESHOLD(QSPI_FIFOThreshold));
-
- tmpreg = QUADSPI->CR ;
-
- tmpreg &= QSPI_CR_CLEAR_FIFOTHRESHOLD_MASK ;
-
- tmpreg |= (QSPI_FIFOThreshold << 8);
-
- QUADSPI->CR = tmpreg;
- }
- void QSPI_SetDataLength(uint32_t QSPI_DataLength)
- {
- if ((QUADSPI->SR & QUADSPI_SR_BUSY) == RESET)
-
- {
-
- QUADSPI->DLR = QSPI_DataLength;
- }
- }
- void QSPI_TimeoutCounterCmd(FunctionalState NewState)
- {
-
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if ((QUADSPI->SR & QUADSPI_SR_BUSY) == RESET)
-
- {
- if (NewState != DISABLE)
- {
-
- QUADSPI->CR |= QUADSPI_CR_TCEN;
- }
- else
- {
-
- QUADSPI->CR &= ~ QUADSPI_CR_TCEN;
- }
- }
- }
- void QSPI_AutoPollingModeStopCmd(FunctionalState NewState)
- {
-
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if ((QUADSPI->SR & QUADSPI_SR_BUSY) == RESET)
-
- {
- if (NewState != DISABLE)
- {
-
- QUADSPI->CR |= QUADSPI_CR_APMS;
- }
- else
- {
-
- QUADSPI->CR &= ~ QUADSPI_CR_APMS;
- }
- }
- }
- void QSPI_AbortRequest(void)
- {
-
- QUADSPI->CR |= QUADSPI_CR_ABORT;
- }
- void QSPI_SendData8(uint8_t Data)
- {
- uint32_t quadspibase = 0;
- quadspibase = (uint32_t)QUADSPI;
- quadspibase += 0x20;
-
- *(__IO uint8_t *) quadspibase = Data;
- }
- void QSPI_SendData16(uint16_t Data)
- {
- uint32_t quadspibase = 0;
- quadspibase = (uint32_t)QUADSPI;
- quadspibase += 0x20;
-
- *(__IO uint16_t *) quadspibase = Data;
- }
- void QSPI_SendData32(uint32_t Data)
- {
- QUADSPI->DR = Data;
- }
- uint8_t QSPI_ReceiveData8(void)
- {
- uint32_t quadspibase = 0;
-
- quadspibase = (uint32_t)QUADSPI;
- quadspibase += 0x20;
-
- return *(__IO uint8_t *) quadspibase;
- }
- uint16_t QSPI_ReceiveData16(void)
- {
- uint32_t quadspibase = 0;
-
- quadspibase = (uint32_t)QUADSPI;
- quadspibase += 0x20;
-
- return *(__IO uint16_t *) quadspibase;
- }
- uint32_t QSPI_ReceiveData32(void)
- {
- return QUADSPI->DR;
- }
- void QSPI_DMACmd(FunctionalState NewState)
- {
-
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- {
-
- QUADSPI->CR |= QUADSPI_CR_DMAEN;
- }
- else
- {
-
- QUADSPI->CR &= ~ QUADSPI_CR_DMAEN;
- }
- }
- void QSPI_ITConfig(uint32_t QSPI_IT, FunctionalState NewState)
- {
- uint32_t tmpreg = 0;
-
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- assert_param(IS_QSPI_IT(QSPI_IT));
-
- tmpreg = QUADSPI->CR ;
-
- if(NewState != DISABLE)
- {
-
- tmpreg |= (uint32_t)(QSPI_IT & QSPI_CR_INTERRUPT_MASK);
- }
- else
- {
-
- tmpreg &= ~(uint32_t)(QSPI_IT & QSPI_CR_INTERRUPT_MASK);
- }
-
- QUADSPI->CR = tmpreg ;
- }
- uint32_t QSPI_GetFIFOLevel(void)
- {
-
- return ((QUADSPI->SR & QUADSPI_SR_FLEVEL)>> 8);
- }
- uint32_t QSPI_GetFMode(void)
- {
-
- return (QUADSPI->CCR & QUADSPI_CCR_FMODE);
- }
- FlagStatus QSPI_GetFlagStatus(uint32_t QSPI_FLAG)
- {
- FlagStatus bitstatus = RESET;
-
- assert_param(IS_QSPI_GET_FLAG(QSPI_FLAG));
-
- if((QUADSPI->SR & QSPI_FLAG) != RESET)
- {
-
- bitstatus = SET;
- }
- else
- {
-
- bitstatus = RESET;
- }
-
- return bitstatus;
- }
- void QSPI_ClearFlag(uint32_t QSPI_FLAG)
- {
-
- assert_param(IS_QSPI_CLEAR_FLAG(QSPI_FLAG));
-
- QUADSPI->FCR = QSPI_FLAG;
- }
- ITStatus QSPI_GetITStatus(uint32_t QSPI_IT)
- {
- ITStatus bitstatus = RESET;
- uint32_t tmpcreg = 0, tmpsreg = 0;
-
- assert_param(IS_QSPI_IT(QSPI_IT));
-
- tmpcreg = QUADSPI->CR;
- tmpcreg &= (uint32_t)(QSPI_IT & QSPI_CR_INTERRUPT_MASK);
-
-
- tmpsreg = QUADSPI->SR;
- tmpsreg &= (uint32_t)(QSPI_IT & QSPI_SR_INTERRUPT_MASK);
-
- if((tmpcreg != RESET) && (tmpsreg != RESET))
- {
-
- bitstatus = SET;
- }
- else
- {
-
- bitstatus = RESET;
- }
-
- return bitstatus;
- }
- void QSPI_ClearITPendingBit(uint32_t QSPI_IT)
- {
-
- assert_param(IS_QSPI_CLEAR_IT(QSPI_IT));
- QUADSPI->FCR = (uint32_t)(QSPI_IT & QSPI_FSR_INTERRUPT_MASK);
- }
- void QSPI_DualFlashMode_Cmd(FunctionalState NewState)
- {
-
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- {
-
- QUADSPI->CR |= QUADSPI_CR_DFM;
- }
- else
- {
-
- QUADSPI->CR &= ~ QUADSPI_CR_DFM;
- }
- }
- #endif
|