M480 BSP V3.05.006
The Board Support Package for M480 Series
qspi.c
Go to the documentation of this file.
1/**************************************************************************/
9#include "NuMicro.h"
10
43uint32_t QSPI_Open(QSPI_T *qspi,
44 uint32_t u32MasterSlave,
45 uint32_t u32QSPIMode,
46 uint32_t u32DataWidth,
47 uint32_t u32BusClock)
48{
49 uint32_t u32ClkSrc = 0U, u32Div, u32HCLKFreq, u32RetValue=0U;
50
51 if(u32DataWidth == 32U)
52 {
53 u32DataWidth = 0U;
54 }
55
56 /* Get system clock frequency */
57 u32HCLKFreq = CLK_GetHCLKFreq();
58
59 if(u32MasterSlave == QSPI_MASTER)
60 {
61 /* Default setting: slave selection signal is active low; disable automatic slave selection function. */
63
64 /* Default setting: MSB first, disable unit transfer interrupt, SP_CYCLE = 0. */
65 qspi->CTL = u32MasterSlave | (u32DataWidth << QSPI_CTL_DWIDTH_Pos) | (u32QSPIMode) | QSPI_CTL_QSPIEN_Msk;
66
67 if(u32BusClock >= u32HCLKFreq)
68 {
69 /* Select PCLK as the clock source of QSPI */
70 if (qspi == QSPI0)
71 CLK->CLKSEL2 = (CLK->CLKSEL2 & (~CLK_CLKSEL2_QSPI0SEL_Msk)) | CLK_CLKSEL2_QSPI0SEL_PCLK0;
72 else if (qspi == QSPI1)
73 CLK->CLKSEL3 = (CLK->CLKSEL3 & (~CLK_CLKSEL3_QSPI1SEL_Msk)) | CLK_CLKSEL3_QSPI1SEL_PCLK1;
74 }
75
76 /* Check clock source of QSPI */
77 if (qspi == QSPI0)
78 {
80 {
81 u32ClkSrc = __HXT; /* Clock source is HXT */
82 }
84 {
85 u32ClkSrc = CLK_GetPLLClockFreq(); /* Clock source is PLL */
86 }
88 {
89 /* Clock source is PCLK0 */
90 u32ClkSrc = CLK_GetPCLK0Freq();
91 }
92 else
93 {
94 u32ClkSrc = __HIRC; /* Clock source is HIRC */
95 }
96 }
97 else if (qspi == QSPI1)
98 {
100 {
101 u32ClkSrc = __HXT; /* Clock source is HXT */
102 }
104 {
105 u32ClkSrc = CLK_GetPLLClockFreq(); /* Clock source is PLL */
106 }
108 {
109 /* Clock source is PCLK1 */
110 u32ClkSrc = CLK_GetPCLK1Freq();
111 }
112 else
113 {
114 u32ClkSrc = __HIRC; /* Clock source is HIRC */
115 }
116 }
117
118 if(u32BusClock >= u32HCLKFreq)
119 {
120 /* Set DIVIDER = 0 */
121 qspi->CLKDIV = 0U;
122 /* Return master peripheral clock rate */
123 u32RetValue = u32ClkSrc;
124 }
125 else if(u32BusClock >= u32ClkSrc)
126 {
127 /* Set DIVIDER = 0 */
128 qspi->CLKDIV = 0U;
129 /* Return master peripheral clock rate */
130 u32RetValue = u32ClkSrc;
131 }
132 else if(u32BusClock == 0U)
133 {
134 /* Set DIVIDER to the maximum value 0xFF. f_qspi = f_qspi_clk_src / (DIVIDER + 1) */
136 /* Return master peripheral clock rate */
137 u32RetValue = (u32ClkSrc / (0xFFU + 1U));
138 }
139 else
140 {
141 u32Div = (((u32ClkSrc * 10U) / u32BusClock + 5U) / 10U) - 1U; /* Round to the nearest integer */
142 if(u32Div > 0xFFU)
143 {
144 u32Div = 0xFFU;
146 /* Return master peripheral clock rate */
147 u32RetValue = (u32ClkSrc / (0xFFU + 1U));
148 }
149 else
150 {
151 qspi->CLKDIV = (qspi->CLKDIV & (~QSPI_CLKDIV_DIVIDER_Msk)) | (u32Div << QSPI_CLKDIV_DIVIDER_Pos);
152 /* Return master peripheral clock rate */
153 u32RetValue = (u32ClkSrc / (u32Div + 1U));
154 }
155 }
156 }
157 else /* For slave mode, force the QSPI peripheral clock rate to equal APB clock rate. */
158 {
159 /* Default setting: slave selection signal is low level active. */
161
162 /* Default setting: MSB first, disable unit transfer interrupt, SP_CYCLE = 0. */
163 qspi->CTL = u32MasterSlave | (u32DataWidth << QSPI_CTL_DWIDTH_Pos) | (u32QSPIMode) | QSPI_CTL_QSPIEN_Msk;
164
165 /* Set DIVIDER = 0 */
166 qspi->CLKDIV = 0U;
167
168 /* Select PCLK as the clock source of QSPI */
169 if (qspi == QSPI0)
170 {
171 CLK->CLKSEL2 = (CLK->CLKSEL2 & (~CLK_CLKSEL2_QSPI0SEL_Msk)) | CLK_CLKSEL2_QSPI0SEL_PCLK0;
172 /* Return slave peripheral clock rate */
173 u32RetValue = CLK_GetPCLK0Freq();
174 }
175 else if (qspi == QSPI1)
176 {
177 CLK->CLKSEL3 = (CLK->CLKSEL3 & (~CLK_CLKSEL3_QSPI1SEL_Msk)) | CLK_CLKSEL3_QSPI1SEL_PCLK1;
178 /* Return slave peripheral clock rate */
179 u32RetValue = CLK_GetPCLK1Freq();
180 }
181 }
182
183 return u32RetValue;
184}
185
193{
194 /* Reset QSPI */
195 if (qspi == QSPI0)
196 {
197 SYS->IPRST1 |= SYS_IPRST1_QSPI0RST_Msk;
198 SYS->IPRST1 &= ~SYS_IPRST1_QSPI0RST_Msk;
199 }
200 else if (qspi == QSPI1)
201 {
202 SYS->IPRST2 |= SYS_IPRST2_QSPI1RST_Msk;
203 SYS->IPRST2 &= ~SYS_IPRST2_QSPI1RST_Msk;
204 }
205}
206
214{
216}
217
226{
228}
229
237{
239}
240
250void QSPI_EnableAutoSS(QSPI_T *qspi, uint32_t u32SSPinMask, uint32_t u32ActiveLevel)
251{
252 qspi->SSCTL = (qspi->SSCTL & (~(QSPI_SSCTL_AUTOSS_Msk | QSPI_SSCTL_SSACTPOL_Msk | QSPI_SSCTL_SS_Msk))) | (u32SSPinMask | u32ActiveLevel | QSPI_SSCTL_AUTOSS_Msk);
253}
254
267uint32_t QSPI_SetBusClock(QSPI_T *qspi, uint32_t u32BusClock)
268{
269 uint32_t u32ClkSrc, u32HCLKFreq;
270 uint32_t u32Div, u32RetValue;
271
272 /* Get system clock frequency */
273 u32HCLKFreq = CLK_GetHCLKFreq();
274
275 if(u32BusClock >= u32HCLKFreq)
276 {
277 /* Select PCLK as the clock source of QSPI */
278 if (qspi == QSPI0)
279 CLK->CLKSEL2 = (CLK->CLKSEL2 & (~CLK_CLKSEL2_QSPI0SEL_Msk)) | CLK_CLKSEL2_QSPI0SEL_PCLK0;
280 else if (qspi == QSPI1)
281 CLK->CLKSEL3 = (CLK->CLKSEL3 & (~CLK_CLKSEL3_QSPI1SEL_Msk)) | CLK_CLKSEL3_QSPI1SEL_PCLK1;
282 }
283
284 /* Check clock source of QSPI */
285 if (qspi == QSPI0)
286 {
288 {
289 u32ClkSrc = __HXT; /* Clock source is HXT */
290 }
292 {
293 u32ClkSrc = CLK_GetPLLClockFreq(); /* Clock source is PLL */
294 }
296 {
297 /* Clock source is PCLK0 */
298 u32ClkSrc = CLK_GetPCLK0Freq();
299 }
300 else
301 {
302 u32ClkSrc = __HIRC; /* Clock source is HIRC */
303 }
304 }
305 else if (qspi == QSPI1)
306 {
308 {
309 u32ClkSrc = __HXT; /* Clock source is HXT */
310 }
312 {
313 u32ClkSrc = CLK_GetPLLClockFreq(); /* Clock source is PLL */
314 }
316 {
317 /* Clock source is PCLK1 */
318 u32ClkSrc = CLK_GetPCLK1Freq();
319 }
320 else
321 {
322 u32ClkSrc = __HIRC; /* Clock source is HIRC */
323 }
324 }
325
326 if(u32BusClock >= u32HCLKFreq)
327 {
328 /* Set DIVIDER = 0 */
329 qspi->CLKDIV = 0U;
330 /* Return master peripheral clock rate */
331 u32RetValue = u32ClkSrc;
332 }
333 else if(u32BusClock >= u32ClkSrc)
334 {
335 /* Set DIVIDER = 0 */
336 qspi->CLKDIV = 0U;
337 /* Return master peripheral clock rate */
338 u32RetValue = u32ClkSrc;
339 }
340 else if(u32BusClock == 0U)
341 {
342 /* Set DIVIDER to the maximum value 0xFF. f_qspi = f_qspi_clk_src / (DIVIDER + 1) */
344 /* Return master peripheral clock rate */
345 u32RetValue = (u32ClkSrc / (0xFFU + 1U));
346 }
347 else
348 {
349 u32Div = (((u32ClkSrc * 10U) / u32BusClock + 5U) / 10U) - 1U; /* Round to the nearest integer */
350 if(u32Div > 0x1FFU)
351 {
352 u32Div = 0x1FFU;
354 /* Return master peripheral clock rate */
355 u32RetValue = (u32ClkSrc / (0xFFU + 1U));
356 }
357 else
358 {
359 qspi->CLKDIV = (qspi->CLKDIV & (~QSPI_CLKDIV_DIVIDER_Msk)) | (u32Div << QSPI_CLKDIV_DIVIDER_Pos);
360 /* Return master peripheral clock rate */
361 u32RetValue = (u32ClkSrc / (u32Div + 1U));
362 }
363 }
364
365 return u32RetValue;
366}
367
376void QSPI_SetFIFO(QSPI_T *qspi, uint32_t u32TxThreshold, uint32_t u32RxThreshold)
377{
379 (u32TxThreshold << QSPI_FIFOCTL_TXTH_Pos) |
380 (u32RxThreshold << QSPI_FIFOCTL_RXTH_Pos);
381}
382
390{
391 uint32_t u32Div;
392 uint32_t u32ClkSrc;
393
394 /* Get DIVIDER setting */
396
397 /* Check clock source of QSPI */
398 if (qspi == QSPI0)
399 {
401 {
402 u32ClkSrc = __HXT; /* Clock source is HXT */
403 }
405 {
406 u32ClkSrc = CLK_GetPLLClockFreq(); /* Clock source is PLL */
407 }
409 {
410 /* Clock source is PCLK0 */
411 u32ClkSrc = CLK_GetPCLK0Freq();
412 }
413 else
414 {
415 u32ClkSrc = __HIRC; /* Clock source is HIRC */
416 }
417 }
418 else if (qspi == QSPI1)
419 {
421 {
422 u32ClkSrc = __HXT; /* Clock source is HXT */
423 }
425 {
426 u32ClkSrc = CLK_GetPLLClockFreq(); /* Clock source is PLL */
427 }
429 {
430 /* Clock source is PCLK1 */
431 u32ClkSrc = CLK_GetPCLK1Freq();
432 }
433 else
434 {
435 u32ClkSrc = __HIRC; /* Clock source is HIRC */
436 }
437 }
438
439 /* Return QSPI bus clock rate */
440 return (u32ClkSrc / (u32Div + 1U));
441}
442
463void QSPI_EnableInt(QSPI_T *qspi, uint32_t u32Mask)
464{
465 /* Enable unit transfer interrupt flag */
466 if((u32Mask & QSPI_UNIT_INT_MASK) == QSPI_UNIT_INT_MASK)
467 {
468 qspi->CTL |= QSPI_CTL_UNITIEN_Msk;
469 }
470
471 /* Enable slave selection signal active interrupt flag */
473 {
475 }
476
477 /* Enable slave selection signal inactive interrupt flag */
479 {
481 }
482
483 /* Enable slave TX under run interrupt flag */
485 {
487 }
488
489 /* Enable slave bit count error interrupt flag */
491 {
493 }
494
495 /* Enable slave TX underflow interrupt flag */
496 if((u32Mask & QSPI_TXUF_INT_MASK) == QSPI_TXUF_INT_MASK)
497 {
499 }
500
501 /* Enable TX threshold interrupt flag */
503 {
505 }
506
507 /* Enable RX threshold interrupt flag */
509 {
511 }
512
513 /* Enable RX overrun interrupt flag */
515 {
517 }
518
519 /* Enable RX time-out interrupt flag */
521 {
523 }
524}
525
546void QSPI_DisableInt(QSPI_T *qspi, uint32_t u32Mask)
547{
548 /* Disable unit transfer interrupt flag */
549 if((u32Mask & QSPI_UNIT_INT_MASK) == QSPI_UNIT_INT_MASK)
550 {
551 qspi->CTL &= ~QSPI_CTL_UNITIEN_Msk;
552 }
553
554 /* Disable slave selection signal active interrupt flag */
556 {
557 qspi->SSCTL &= ~QSPI_SSCTL_SSACTIEN_Msk;
558 }
559
560 /* Disable slave selection signal inactive interrupt flag */
562 {
563 qspi->SSCTL &= ~QSPI_SSCTL_SSINAIEN_Msk;
564 }
565
566 /* Disable slave TX under run interrupt flag */
568 {
569 qspi->SSCTL &= ~QSPI_SSCTL_SLVURIEN_Msk;
570 }
571
572 /* Disable slave bit count error interrupt flag */
574 {
575 qspi->SSCTL &= ~QSPI_SSCTL_SLVBEIEN_Msk;
576 }
577
578 /* Disable slave TX underflow interrupt flag */
579 if((u32Mask & QSPI_TXUF_INT_MASK) == QSPI_TXUF_INT_MASK)
580 {
581 qspi->FIFOCTL &= ~QSPI_FIFOCTL_TXUFIEN_Msk;
582 }
583
584 /* Disable TX threshold interrupt flag */
586 {
587 qspi->FIFOCTL &= ~QSPI_FIFOCTL_TXTHIEN_Msk;
588 }
589
590 /* Disable RX threshold interrupt flag */
592 {
593 qspi->FIFOCTL &= ~QSPI_FIFOCTL_RXTHIEN_Msk;
594 }
595
596 /* Disable RX overrun interrupt flag */
598 {
599 qspi->FIFOCTL &= ~QSPI_FIFOCTL_RXOVIEN_Msk;
600 }
601
602 /* Disable RX time-out interrupt flag */
604 {
605 qspi->FIFOCTL &= ~QSPI_FIFOCTL_RXTOIEN_Msk;
606 }
607}
608
629uint32_t QSPI_GetIntFlag(QSPI_T *qspi, uint32_t u32Mask)
630{
631 uint32_t u32IntFlag = 0U, u32TmpVal;
632
633 u32TmpVal = qspi->STATUS & QSPI_STATUS_UNITIF_Msk;
634 /* Check unit transfer interrupt flag */
635 if((u32Mask & QSPI_UNIT_INT_MASK) && (u32TmpVal))
636 {
637 u32IntFlag |= QSPI_UNIT_INT_MASK;
638 }
639
640 u32TmpVal = qspi->STATUS & QSPI_STATUS_SSACTIF_Msk;
641 /* Check slave selection signal active interrupt flag */
642 if((u32Mask & QSPI_SSACT_INT_MASK) && (u32TmpVal))
643 {
644 u32IntFlag |= QSPI_SSACT_INT_MASK;
645 }
646
647 u32TmpVal = qspi->STATUS & QSPI_STATUS_SSINAIF_Msk;
648 /* Check slave selection signal inactive interrupt flag */
649 if((u32Mask & QSPI_SSINACT_INT_MASK) && (u32TmpVal))
650 {
651 u32IntFlag |= QSPI_SSINACT_INT_MASK;
652 }
653
654 u32TmpVal = qspi->STATUS & QSPI_STATUS_SLVURIF_Msk;
655 /* Check slave TX under run interrupt flag */
656 if((u32Mask & QSPI_SLVUR_INT_MASK) && (u32TmpVal))
657 {
658 u32IntFlag |= QSPI_SLVUR_INT_MASK;
659 }
660
661 u32TmpVal = qspi->STATUS & QSPI_STATUS_SLVBEIF_Msk;
662 /* Check slave bit count error interrupt flag */
663 if((u32Mask & QSPI_SLVBE_INT_MASK) && (u32TmpVal))
664 {
665 u32IntFlag |= QSPI_SLVBE_INT_MASK;
666 }
667
668 u32TmpVal = qspi->STATUS & QSPI_STATUS_TXUFIF_Msk;
669 /* Check slave TX underflow interrupt flag */
670 if((u32Mask & QSPI_TXUF_INT_MASK) && (u32TmpVal))
671 {
672 u32IntFlag |= QSPI_TXUF_INT_MASK;
673 }
674
675 u32TmpVal = qspi->STATUS & QSPI_STATUS_TXTHIF_Msk;
676 /* Check TX threshold interrupt flag */
677 if((u32Mask & QSPI_FIFO_TXTH_INT_MASK) && (u32TmpVal))
678 {
679 u32IntFlag |= QSPI_FIFO_TXTH_INT_MASK;
680 }
681
682 u32TmpVal = qspi->STATUS & QSPI_STATUS_RXTHIF_Msk;
683 /* Check RX threshold interrupt flag */
684 if((u32Mask & QSPI_FIFO_RXTH_INT_MASK) && (u32TmpVal))
685 {
686 u32IntFlag |= QSPI_FIFO_RXTH_INT_MASK;
687 }
688
689 u32TmpVal = qspi->STATUS & QSPI_STATUS_RXOVIF_Msk;
690 /* Check RX overrun interrupt flag */
691 if((u32Mask & QSPI_FIFO_RXOV_INT_MASK) && (u32TmpVal))
692 {
693 u32IntFlag |= QSPI_FIFO_RXOV_INT_MASK;
694 }
695
696 u32TmpVal = qspi->STATUS & QSPI_STATUS_RXTOIF_Msk;
697 /* Check RX time-out interrupt flag */
698 if((u32Mask & QSPI_FIFO_RXTO_INT_MASK) && (u32TmpVal))
699 {
700 u32IntFlag |= QSPI_FIFO_RXTO_INT_MASK;
701 }
702
703 return u32IntFlag;
704}
705
724void QSPI_ClearIntFlag(QSPI_T *qspi, uint32_t u32Mask)
725{
726 if(u32Mask & QSPI_UNIT_INT_MASK)
727 {
728 qspi->STATUS = QSPI_STATUS_UNITIF_Msk; /* Clear unit transfer interrupt flag */
729 }
730
731 if(u32Mask & QSPI_SSACT_INT_MASK)
732 {
733 qspi->STATUS = QSPI_STATUS_SSACTIF_Msk; /* Clear slave selection signal active interrupt flag */
734 }
735
736 if(u32Mask & QSPI_SSINACT_INT_MASK)
737 {
738 qspi->STATUS = QSPI_STATUS_SSINAIF_Msk; /* Clear slave selection signal inactive interrupt flag */
739 }
740
741 if(u32Mask & QSPI_SLVUR_INT_MASK)
742 {
743 qspi->STATUS = QSPI_STATUS_SLVURIF_Msk; /* Clear slave TX under run interrupt flag */
744 }
745
746 if(u32Mask & QSPI_SLVBE_INT_MASK)
747 {
748 qspi->STATUS = QSPI_STATUS_SLVBEIF_Msk; /* Clear slave bit count error interrupt flag */
749 }
750
751 if(u32Mask & QSPI_TXUF_INT_MASK)
752 {
753 qspi->STATUS = QSPI_STATUS_TXUFIF_Msk; /* Clear slave TX underflow interrupt flag */
754 }
755
756 if(u32Mask & QSPI_FIFO_RXOV_INT_MASK)
757 {
758 qspi->STATUS = QSPI_STATUS_RXOVIF_Msk; /* Clear RX overrun interrupt flag */
759 }
760
761 if(u32Mask & QSPI_FIFO_RXTO_INT_MASK)
762 {
763 qspi->STATUS = QSPI_STATUS_RXTOIF_Msk; /* Clear RX time-out interrupt flag */
764 }
765}
766
785uint32_t QSPI_GetStatus(QSPI_T *qspi, uint32_t u32Mask)
786{
787 uint32_t u32Flag = 0U, u32TmpValue;
788
789 u32TmpValue = qspi->STATUS & QSPI_STATUS_BUSY_Msk;
790 /* Check busy status */
791 if((u32Mask & QSPI_BUSY_MASK) && (u32TmpValue))
792 {
793 u32Flag |= QSPI_BUSY_MASK;
794 }
795
796 u32TmpValue = qspi->STATUS & QSPI_STATUS_RXEMPTY_Msk;
797 /* Check RX empty flag */
798 if((u32Mask & QSPI_RX_EMPTY_MASK) && (u32TmpValue))
799 {
800 u32Flag |= QSPI_RX_EMPTY_MASK;
801 }
802
803 u32TmpValue = qspi->STATUS & QSPI_STATUS_RXFULL_Msk;
804 /* Check RX full flag */
805 if((u32Mask & QSPI_RX_FULL_MASK) && (u32TmpValue))
806 {
807 u32Flag |= QSPI_RX_FULL_MASK;
808 }
809
810 u32TmpValue = qspi->STATUS & QSPI_STATUS_TXEMPTY_Msk;
811 /* Check TX empty flag */
812 if((u32Mask & QSPI_TX_EMPTY_MASK) && (u32TmpValue))
813 {
814 u32Flag |= QSPI_TX_EMPTY_MASK;
815 }
816
817 u32TmpValue = qspi->STATUS & QSPI_STATUS_TXFULL_Msk;
818 /* Check TX full flag */
819 if((u32Mask & QSPI_TX_FULL_MASK) && (u32TmpValue))
820 {
821 u32Flag |= QSPI_TX_FULL_MASK;
822 }
823
824 u32TmpValue = qspi->STATUS & QSPI_STATUS_TXRXRST_Msk;
825 /* Check TX/RX reset flag */
826 if((u32Mask & QSPI_TXRX_RESET_MASK) && (u32TmpValue))
827 {
828 u32Flag |= QSPI_TXRX_RESET_MASK;
829 }
830
831 u32TmpValue = qspi->STATUS & QSPI_STATUS_QSPIENSTS_Msk;
832 /* Check QSPIEN flag */
833 if((u32Mask & QSPI_QSPIEN_STS_MASK) && (u32TmpValue))
834 {
835 u32Flag |= QSPI_QSPIEN_STS_MASK;
836 }
837
838 u32TmpValue = qspi->STATUS & QSPI_STATUS_SSLINE_Msk;
839 /* Check QSPIx_SS line status */
840 if((u32Mask & QSPI_SSLINE_STS_MASK) && (u32TmpValue))
841 {
842 u32Flag |= QSPI_SSLINE_STS_MASK;
843 }
844
845 return u32Flag;
846}
847
848
849 /* end of group QSPI_EXPORTED_FUNCTIONS */
851 /* end of group QSPI_Driver */
853 /* end of group Standard_Driver */
855
856/*** (C) COPYRIGHT 2016 Nuvoton Technology Corp. ***/
NuMicro peripheral access layer header file.
#define CLK_CLKSEL2_QSPI0SEL_PLL
Definition: clk.h:149
#define CLK_CLKSEL2_QSPI0SEL_PCLK0
Definition: clk.h:151
#define CLK_CLKSEL2_QSPI0SEL_HXT
Definition: clk.h:148
#define CLK_CLKSEL3_QSPI1SEL_PCLK1
Definition: clk.h:210
#define CLK_CLKSEL3_QSPI1SEL_PLL
Definition: clk.h:208
#define CLK_CLKSEL3_QSPI1SEL_HXT
Definition: clk.h:207
uint32_t CLK_GetHCLKFreq(void)
Get HCLK frequency.
Definition: clk.c:246
uint32_t CLK_GetPCLK1Freq(void)
Get PCLK1 frequency.
Definition: clk.c:206
uint32_t CLK_GetPCLK0Freq(void)
Get PCLK0 frequency.
Definition: clk.c:166
uint32_t CLK_GetPLLClockFreq(void)
Get PLL clock frequency.
Definition: clk.c:1201
#define QSPI1
Definition: M480.h:424
#define CLK
Definition: M480.h:368
#define QSPI0
Definition: M480.h:423
#define SYS
Definition: M480.h:367
#define QSPI_UNIT_INT_MASK
Definition: qspi.h:43
#define QSPI_FIFO_RXOV_INT_MASK
Definition: qspi.h:51
#define QSPI_BUSY_MASK
Definition: qspi.h:55
#define QSPI_TX_EMPTY_MASK
Definition: qspi.h:58
#define QSPI_SS_ACTIVE_LOW
Definition: qspi.h:40
#define QSPI_FIFO_RXTH_INT_MASK
Definition: qspi.h:50
#define QSPI_RX_FULL_MASK
Definition: qspi.h:57
#define QSPI_MASTER
Definition: qspi.h:36
#define QSPI_TXRX_RESET_MASK
Definition: qspi.h:60
#define QSPI_QSPIEN_STS_MASK
Definition: qspi.h:61
#define QSPI_SSLINE_STS_MASK
Definition: qspi.h:62
#define QSPI_FIFO_RXTO_INT_MASK
Definition: qspi.h:52
#define QSPI_SLVBE_INT_MASK
Definition: qspi.h:47
#define QSPI_SSINACT_INT_MASK
Definition: qspi.h:45
#define QSPI_RX_EMPTY_MASK
Definition: qspi.h:56
#define QSPI_TX_FULL_MASK
Definition: qspi.h:59
#define QSPI_TXUF_INT_MASK
Definition: qspi.h:48
#define QSPI_SSACT_INT_MASK
Definition: qspi.h:44
#define QSPI_FIFO_TXTH_INT_MASK
Definition: qspi.h:49
#define QSPI_SLVUR_INT_MASK
Definition: qspi.h:46
void QSPI_Close(QSPI_T *qspi)
Disable QSPI controller.
Definition: qspi.c:192
void QSPI_ClearTxFIFO(QSPI_T *qspi)
Clear TX FIFO buffer.
Definition: qspi.c:225
void QSPI_ClearRxFIFO(QSPI_T *qspi)
Clear RX FIFO buffer.
Definition: qspi.c:213
uint32_t QSPI_SetBusClock(QSPI_T *qspi, uint32_t u32BusClock)
Set the QSPI bus clock.
Definition: qspi.c:267
void QSPI_EnableInt(QSPI_T *qspi, uint32_t u32Mask)
Enable interrupt function.
Definition: qspi.c:463
void QSPI_ClearIntFlag(QSPI_T *qspi, uint32_t u32Mask)
Clear interrupt flag.
Definition: qspi.c:724
uint32_t QSPI_Open(QSPI_T *qspi, uint32_t u32MasterSlave, uint32_t u32QSPIMode, uint32_t u32DataWidth, uint32_t u32BusClock)
This function make QSPI module be ready to transfer.
Definition: qspi.c:43
void QSPI_SetFIFO(QSPI_T *qspi, uint32_t u32TxThreshold, uint32_t u32RxThreshold)
Configure FIFO threshold setting.
Definition: qspi.c:376
uint32_t QSPI_GetBusClock(QSPI_T *qspi)
Get the actual frequency of QSPI bus clock. Only available in Master mode.
Definition: qspi.c:389
void QSPI_EnableAutoSS(QSPI_T *qspi, uint32_t u32SSPinMask, uint32_t u32ActiveLevel)
Enable the automatic slave selection function.
Definition: qspi.c:250
uint32_t QSPI_GetIntFlag(QSPI_T *qspi, uint32_t u32Mask)
Get interrupt flag.
Definition: qspi.c:629
void QSPI_DisableInt(QSPI_T *qspi, uint32_t u32Mask)
Disable interrupt function.
Definition: qspi.c:546
void QSPI_DisableAutoSS(QSPI_T *qspi)
Disable the automatic slave selection function.
Definition: qspi.c:236
uint32_t QSPI_GetStatus(QSPI_T *qspi, uint32_t u32Mask)
Get QSPI status.
Definition: qspi.c:785
#define QSPI_FIFOCTL_RXFBCLR_Msk
Definition: qspi_reg.h:925
#define QSPI_STATUS_TXRXRST_Msk
Definition: qspi_reg.h:991
#define QSPI_SSCTL_AUTOSS_Msk
Definition: qspi_reg.h:865
#define QSPI_SSCTL_SS_Msk
Definition: qspi_reg.h:859
#define SYS_IPRST2_QSPI1RST_Msk
Definition: sys_reg.h:4990
#define QSPI_STATUS_BUSY_Msk
Definition: qspi_reg.h:937
#define QSPI_STATUS_RXTOIF_Msk
Definition: qspi_reg.h:973
#define CLK_CLKSEL2_QSPI0SEL_Msk
Definition: clk_reg.h:2559
#define QSPI_STATUS_RXOVIF_Msk
Definition: qspi_reg.h:970
#define QSPI_SSCTL_SLVBEIEN_Msk
Definition: qspi_reg.h:877
#define QSPI_STATUS_SSACTIF_Msk
Definition: qspi_reg.h:943
#define QSPI_STATUS_TXFULL_Msk
Definition: qspi_reg.h:982
#define QSPI_STATUS_SLVURIF_Msk
Definition: qspi_reg.h:958
#define QSPI_FIFOCTL_RXTH_Pos
Definition: qspi_reg.h:930
#define QSPI_FIFOCTL_TXTH_Pos
Definition: qspi_reg.h:933
#define QSPI_SSCTL_SSACTIEN_Msk
Definition: qspi_reg.h:883
#define QSPI_FIFOCTL_TXTH_Msk
Definition: qspi_reg.h:934
#define QSPI_CTL_QSPIEN_Msk
Definition: qspi_reg.h:808
#define QSPI_STATUS_TXEMPTY_Msk
Definition: qspi_reg.h:979
#define QSPI_CTL_DWIDTH_Pos
Definition: qspi_reg.h:822
#define QSPI_STATUS_UNITIF_Msk
Definition: qspi_reg.h:940
#define QSPI_FIFOCTL_TXUFIEN_Msk
Definition: qspi_reg.h:922
#define QSPI_STATUS_RXTHIF_Msk
Definition: qspi_reg.h:967
#define QSPI_STATUS_TXTHIF_Msk
Definition: qspi_reg.h:985
#define QSPI_STATUS_TXUFIF_Msk
Definition: qspi_reg.h:988
#define QSPI_FIFOCTL_RXTOIEN_Msk
Definition: qspi_reg.h:913
#define QSPI_CTL_UNITIEN_Msk
Definition: qspi_reg.h:838
#define QSPI_STATUS_SSLINE_Msk
Definition: qspi_reg.h:949
#define CLK_CLKSEL3_QSPI1SEL_Msk
Definition: clk_reg.h:2592
#define QSPI_FIFOCTL_TXFBCLR_Msk
Definition: qspi_reg.h:928
#define QSPI_SSCTL_SSACTPOL_Msk
Definition: qspi_reg.h:862
#define QSPI_STATUS_SLVBEIF_Msk
Definition: qspi_reg.h:955
#define QSPI_FIFOCTL_RXTHIEN_Msk
Definition: qspi_reg.h:907
#define QSPI_FIFOCTL_RXOVIEN_Msk
Definition: qspi_reg.h:916
#define QSPI_CLKDIV_DIVIDER_Msk
Definition: qspi_reg.h:856
#define QSPI_FIFOCTL_RXTH_Msk
Definition: qspi_reg.h:931
#define QSPI_STATUS_SSINAIF_Msk
Definition: qspi_reg.h:946
#define QSPI_SSCTL_SLVURIEN_Msk
Definition: qspi_reg.h:880
#define QSPI_STATUS_QSPIENSTS_Msk
Definition: qspi_reg.h:976
#define QSPI_STATUS_RXEMPTY_Msk
Definition: qspi_reg.h:961
#define QSPI_SSCTL_SSINAIEN_Msk
Definition: qspi_reg.h:886
#define SYS_IPRST1_QSPI0RST_Msk
Definition: sys_reg.h:4921
#define QSPI_FIFOCTL_TXTHIEN_Msk
Definition: qspi_reg.h:910
#define QSPI_CLKDIV_DIVIDER_Pos
Definition: qspi_reg.h:855
#define QSPI_STATUS_RXFULL_Msk
Definition: qspi_reg.h:964
__IO uint32_t STATUS
Definition: qspi_reg.h:790
__IO uint32_t SSCTL
Definition: qspi_reg.h:787
__IO uint32_t FIFOCTL
Definition: qspi_reg.h:789
__IO uint32_t CTL
Definition: qspi_reg.h:785
__IO uint32_t CLKDIV
Definition: qspi_reg.h:786
#define __HIRC
Definition: system_M480.h:36
#define __HXT
Definition: system_M480.h:29