5.34 XSPI_V2 使用说明

本章说明 N32H49x 标准外设库中 XSPI_V2 驱动的文件组成与 50 个公开函数,以及 XSPI_Enhanced_Mode、XSPI_XIP_Mode 2 个示例。XSPI_V2 面向增强型 SPI 与内存映射(XIP)访问外扩 Flash,提供标准、增强、XIP、Hyperbus 等初始化接口,请配合用户手册的“多线串行外设接口(xSPI)”章节阅读。

5.34.1 相关文件

相对路径 作用
firmware/n32h49x_std_periph_driver/inc/n32h49x_xspi_v2.h 定义帧格式、传输模式、FIFO 阈值、XIP、Hyperbus、中断与 DMA 选择等宏与 XSPI 初始化结构,声明 50 个公开函数
firmware/n32h49x_std_periph_driver/src/n32h49x_xspi_v2.c 实现上述 50 个函数:基础与增强初始化、XIP 与 Hyperbus、FIFO 阈值与数据量、数据收发与标志、DMA、识别与版本、中断
projects/n32h49x_EVAL/examples/XSPI_V2/ XSPI_V2 示例根目录,含 XSPI_Enhanced_Mode、XSPI_XIP_Mode 2 个示例
projects/n32h49x_EVAL/examples/XSPI_V2/XSPI_Enhanced_Mode/ 该示例的工程目录组成:MDK-ARM/、EWARM/、inc/、src/、readme.txt
projects/n32h49x_EVAL/bsp/ 该示例引用的公共板级文件:串口日志函数

5.34.2 API 参考

搜索 API共 50 个函数

以下 50 个公开函数按 n32h49x_xspi_v2.h 的声明顺序分为 10 组;每个条目给出功能摘要与 n32h49x_xspi_v2.c 中该函数正上方的注释原文。

基础初始化与使能

XSPI_DeInit、XSPI_InitBase、XSPI_InitEnhanced、XSPI_InitXIP、XSPI_InitHyperbus

结构体默认值

XSPI_StructBaseInit、XSPI_InitEnhancedStruct、XSPI_InitXIPStruct、XSPI_InitHyperbusStruct

模式使能与片选

XSPI_EnableHyperbus、XSPI_EnableXIPHyperbusRead、XSPI_EnableXIPHyperbusWrite、XSPI_Enable、XSPI_Slave_Select、XSPI_XIP_Slave_Select

数据帧、时钟延长与数据掩码

XSPI_SetNumberOfDataFrame、XSPI_EnableClockStrech、XSPI_EnableDataMask

FIFO 阈值与数据量

XSPI_SetTXStartFIFOThreshold、XSPI_GetTXStartFIFOThreshold、XSPI_SetTXFIFOEmptyThreshold、XSPI_GetTXFIFOEmptyThreshold、XSPI_SetRXFIFOFullThreshold、XSPI_GetRXFIFOFullThreshold、XSPI_GetTXFIFODataNum、XSPI_GetRXFIFODataNum

数据收发与标志

XSPI_GetDataPointer、XSPI_SendData、XSPI_ReceiveData、XSPI_ClearRxFIFO、XSPI_GetFlagStatus

DMA

XSPI_EnableDma、XSPI_SetDMATxFIFOThreshold、XSPI_GetDMATxFIFOThreshold、XSPI_SetDMARxFIFOThreshold、XSPI_GetDMARxFIFOThreshold、XSPI_GetDMACompletedDataFrameNum

识别与版本

XSPI_GetIdentification、XSPI_GetComponentVersion

XIP 操作码

XSPI_SetXIPModeBit、XSPI_SetXIPReadIncrOpcode、XSPI_SetXIPReadWrapOpcode、XSPI_SetXIPWriteIncrOpcode、XSPI_SetXIPWriteWrapOpcode

中断

XSPI_DisbaleAllInt、XSPI_EnableInt、XSPI_GetINTStatus、XSPI_GetINTRawStatus、XSPI_ClrITPendingBit、XSPI_ClrITAllPendingBit

void XSPI_DeInit(void)将 XSPI 外设寄存器恢复为默认复位值。
源码注释
name    XSPI_DeInit.
fun     Deinitializes the XSPI peripheral registers to its default reset values.
return  none
void XSPI_InitBase(XSPI_Module *xSPIx, XSPI_InitType* XSPI_StandInitStruct)按基础初始化结构配置 XSPI。
源码注释
name    XSPI_InitBase.
fun     Initilizes the Standard SPI Master mode or Slave mode.
param   SCPH:
          - XSPI_SCPH_FIRST_EDGE
          - XSPI_SCPH_SECOND_EDGE
param   SCPOL:
          - XSPI_SCPOL_LOW_LEVEL
          - XSPI_SCPOL_HIGH_LEVEL
param   FrameFormat:
          - XSPI_STANDARD_MODE
          - XSPI_DUAL_LINE_MODE  Note: Only Slave mode can used
          - XSPI_QUAD_LINE_MODE  Note: Only Slave mode can used
          - XSPI_OCTAL_LINE_MODE Note: Only Slave mode can used
param   DataFrameSize:
          - XSPI_FRAME_SIZE_4_BIT
          - XSPI_FRAME_SIZE_5_BIT
          - XSPI_FRAME_SIZE_6_BIT
          - XSPI_FRAME_SIZE_7_BIT
          - XSPI_FRAME_SIZE_8_BIT
          - XSPI_FRAME_SIZE_9_BIT
          - XSPI_FRAME_SIZE_10_BIT
          - XSPI_FRAME_SIZE_11_BIT
          - XSPI_FRAME_SIZE_12_BIT
          - XSPI_FRAME_SIZE_13_BIT
          - XSPI_FRAME_SIZE_14_BIT
          - XSPI_FRAME_SIZE_15_BIT
          - XSPI_FRAME_SIZE_16_BIT
          - XSPI_FRAME_SIZE_17_BIT
          - XSPI_FRAME_SIZE_18_BIT
          - XSPI_FRAME_SIZE_19_BIT
          - XSPI_FRAME_SIZE_20_BIT
          - XSPI_FRAME_SIZE_21_BIT
          - XSPI_FRAME_SIZE_22_BIT
          - XSPI_FRAME_SIZE_23_BIT
          - XSPI_FRAME_SIZE_24_BIT
          - XSPI_FRAME_SIZE_25_BIT
          - XSPI_FRAME_SIZE_26_BIT
          - XSPI_FRAME_SIZE_27_BIT
          - XSPI_FRAME_SIZE_28_BIT
          - XSPI_FRAME_SIZE_29_BIT
          - XSPI_FRAME_SIZE_30_BIT
          - XSPI_FRAME_SIZE_31_BIT
          - XSPI_FRAME_SIZE_32_BIT
param   TransferMode:
          - XSPI_TX_AND_RX_MODE
          - XSPI_TX_ONLY_MODE
          - XSPI_RX_ONLY_MODE
          - XSPI_EEPROM_READ_MODE
param   Role:
          - XSPI_SLAVE_ROLE
          - XSPI_MASTER_ROLE
param   Baudr:
          - Any even number between 2 and 65534
param   RxdSamplingEdge:
          - XSPI_RXD_HCLK_RISING_SAMPLING
          - XSPI_RXD_HCLK_FALLING_SAMPLING
param   RxdSampleDelay:
          - Valid values 0 ~ 255, measured in HCLK
param   NssToggle:
          - XSPI_NSS_TOGGLE_DISABLE
          - XSPI_NSS_TOGGLE_ENABLE
param   EnhSlave_ClockStrech:
          - XSPI_CLOCK_STRETCH_DISABLE
          - XSPI_CLOCK_STRETCH_ENABLE
return  none
void XSPI_InitEnhanced(XSPI_Module *xSPIx, XSPI_EnhancedInitType* XSPI_EnhancedInitStruct)按增强型初始化结构配置 XSPI。
源码注释
name    XSPI_InitEnhanced.
fun     Initilizes the enhanced SPI mode.
param   SCPH:
          - XSPI_SCPH_FIRST_EDGE
          - XSPI_SCPH_SECOND_EDGE
param   SCPOL:
          - XSPI_SCPOL_LOW_LEVEL
          - XSPI_SCPOL_HIGH_LEVEL
param   FrameFormat:
          - XSPI_DUAL_LINE_MODE
          - XSPI_QUAD_LINE_MODE
          - XSPI_OCTAL_LINE_MODE
param   DataFrameSize:
          - XSPI_FRAME_SIZE_4_BIT
          - XSPI_FRAME_SIZE_5_BIT
          - XSPI_FRAME_SIZE_6_BIT
          - XSPI_FRAME_SIZE_7_BIT
          - XSPI_FRAME_SIZE_8_BIT
          - XSPI_FRAME_SIZE_9_BIT
          - XSPI_FRAME_SIZE_10_BIT
          - XSPI_FRAME_SIZE_11_BIT
          - XSPI_FRAME_SIZE_12_BIT
          - XSPI_FRAME_SIZE_13_BIT
          - XSPI_FRAME_SIZE_14_BIT
          - XSPI_FRAME_SIZE_15_BIT
          - XSPI_FRAME_SIZE_16_BIT
          - XSPI_FRAME_SIZE_17_BIT
          - XSPI_FRAME_SIZE_18_BIT
          - XSPI_FRAME_SIZE_19_BIT
          - XSPI_FRAME_SIZE_20_BIT
          - XSPI_FRAME_SIZE_21_BIT
          - XSPI_FRAME_SIZE_22_BIT
          - XSPI_FRAME_SIZE_23_BIT
          - XSPI_FRAME_SIZE_24_BIT
          - XSPI_FRAME_SIZE_25_BIT
          - XSPI_FRAME_SIZE_26_BIT
          - XSPI_FRAME_SIZE_27_BIT
          - XSPI_FRAME_SIZE_28_BIT
          - XSPI_FRAME_SIZE_29_BIT
          - XSPI_FRAME_SIZE_30_BIT
          - XSPI_FRAME_SIZE_31_BIT
          - XSPI_FRAME_SIZE_32_BIT
param   TransferMode:
          - XSPI_TX_ONLY_MODE
          - XSPI_RX_ONLY_MODE
param   Baudr:
          - Any even number between 2 and 65534
param   RxdSamplingEdge:
          - XSPI_RXD_HCLK_RISING_SAMPLING
          - XSPI_RXD_HCLK_FALLING_SAMPLING
          Note: no need to worry about it in DDR mode
param   RxdSampleDelay:
          - Valid values 0 ~ 255, measured in HCLK
          Note: no need to worry about it in DDR mode
param   TransferType:
          - XSPI_INST_ADDR_SINGLE_LINE
          - XSPI_INST_SINGLE_LINE_ADDR_MULTI_LINE
          - XSPI_INST_ADDR_MULTI_LINE
param   AddrLen:
          - XSPI_NO_ADDR_PHASE
          - XSPI_ADDR_LEN_4BIT
          - XSPI_ADDR_LEN_8BIT
          - XSPI_ADDR_LEN_12BIT
          - XSPI_ADDR_LEN_16BIT
          - XSPI_ADDR_LEN_20BIT
          - XSPI_ADDR_LEN_24BIT
          - XSPI_ADDR_LEN_28BIT
          - XSPI_ADDR_LEN_32BIT
          - XSPI_ADDR_LEN_36BIT
          - XSPI_ADDR_LEN_40BIT
          - XSPI_ADDR_LEN_44BIT
          - XSPI_ADDR_LEN_48BIT
          - XSPI_ADDR_LEN_52BIT
          - XSPI_ADDR_LEN_56BIT
          - XSPI_ADDR_LEN_60BIT
param   InstructLen:
          - XSPI_NO_INST_PHASE
          - XSPI_INST_LEN_4BIT
          - XSPI_INST_LEN_8BIT
          - XSPI_INST_LEN_16BIT
param   WaitCycles:
          - XSPI_WAIT_0_CYCLES
          - XSPI_WAIT_1_CYCLES
          - XSPI_WAIT_2_CYCLES
          - XSPI_WAIT_3_CYCLES
          - XSPI_WAIT_4_CYCLES
          - XSPI_WAIT_5_CYCLES
          - XSPI_WAIT_6_CYCLES
          - XSPI_WAIT_7_CYCLES
          - XSPI_WAIT_8_CYCLES
          - XSPI_WAIT_9_CYCLES
          - XSPI_WAIT_10_CYCLES
          - XSPI_WAIT_11_CYCLES
          - XSPI_WAIT_12_CYCLES
          - XSPI_WAIT_13_CYCLES
          - XSPI_WAIT_14_CYCLES
          - XSPI_WAIT_15_CYCLES
          - XSPI_WAIT_16_CYCLES
          - XSPI_WAIT_17_CYCLES
          - XSPI_WAIT_18_CYCLES
          - XSPI_WAIT_19_CYCLES
          - XSPI_WAIT_20_CYCLES
          - XSPI_WAIT_21_CYCLES
          - XSPI_WAIT_22_CYCLES
          - XSPI_WAIT_23_CYCLES
          - XSPI_WAIT_24_CYCLES
          - XSPI_WAIT_25_CYCLES
          - XSPI_WAIT_26_CYCLES
          - XSPI_WAIT_27_CYCLES
          - XSPI_WAIT_28_CYCLES
          - XSPI_WAIT_29_CYCLES
          - XSPI_WAIT_30_CYCLES
          - XSPI_WAIT_31_CYCLES
          - XSPI_WAIT_32_CYCLES
param   ClockStrech:
          - XSPI_CLOCK_STRETCH_DISABLE
          - XSPI_CLOCK_STRETCH_ENABLE
param   DDREable:
          - XSPI_DDR_DISABLE
          - XSPI_DDR_ENABLE
param   DDR_InitType:
          Note: The following parameters only need to be configured in DDR mode
param     InstrucDDR:
            - XSPI_INST_DDR_DISABLE
            - XSPI_INST_DDR_ENABLE
param     RxdsSignal:
            - XSPI_RXDS_SIGNAL_DISABLE
            - XSPI_RXDS_SIGNAL_ENABLE
param     TxdDataMask:
            - XSPI_DATA_MASK_DISABLE
            - XSPI_DATA_MASK_ENABLE
param     TxdDriverEdge:
            - 0 ~ 255, Max value = (BAUD/2) - 1, BAUDR = CLKDIV[14:0] * 2)
return  none
void XSPI_InitXIP(XSPI_Module *xSPIx, XSPI_XIPInitType* XSPI_XIPInitStruct)按 XIP 初始化结构配置 XSPI。
源码注释
name    XSPI_InitEnhanced.
fun     Initilizes the XIP mode.
param   SCPH:
          - XSPI_SCPH_FIRST_EDGE
          - XSPI_SCPH_SECOND_EDGE
param   SCPOL:
          - XSPI_SCPOL_LOW_LEVEL
          - XSPI_SCPOL_HIGH_LEVEL
param   DataFrameSize:
          - XSPI_FRAME_SIZE_4_BIT
          - XSPI_FRAME_SIZE_5_BIT
          - XSPI_FRAME_SIZE_6_BIT
          - XSPI_FRAME_SIZE_7_BIT
          - XSPI_FRAME_SIZE_8_BIT
          - XSPI_FRAME_SIZE_9_BIT
          - XSPI_FRAME_SIZE_10_BIT
          - XSPI_FRAME_SIZE_11_BIT
          - XSPI_FRAME_SIZE_12_BIT
          - XSPI_FRAME_SIZE_13_BIT
          - XSPI_FRAME_SIZE_14_BIT
          - XSPI_FRAME_SIZE_15_BIT
          - XSPI_FRAME_SIZE_16_BIT
          - XSPI_FRAME_SIZE_17_BIT
          - XSPI_FRAME_SIZE_18_BIT
          - XSPI_FRAME_SIZE_19_BIT
          - XSPI_FRAME_SIZE_20_BIT
          - XSPI_FRAME_SIZE_21_BIT
          - XSPI_FRAME_SIZE_22_BIT
          - XSPI_FRAME_SIZE_23_BIT
          - XSPI_FRAME_SIZE_24_BIT
          - XSPI_FRAME_SIZE_25_BIT
          - XSPI_FRAME_SIZE_26_BIT
          - XSPI_FRAME_SIZE_27_BIT
          - XSPI_FRAME_SIZE_28_BIT
          - XSPI_FRAME_SIZE_29_BIT
          - XSPI_FRAME_SIZE_30_BIT
          - XSPI_FRAME_SIZE_31_BIT
          - XSPI_FRAME_SIZE_32_BIT
param   TransferMode:
          - XSPI_TX_ONLY_MODE
          - XSPI_RX_ONLY_MODE
param   Baudr:
          - Any even number between 2 and 65534
param   XipFrameFormat:
          - XSPI_DUAL_LINE_MODE
          - XSPI_QUAD_LINE_MODE
          - XSPI_OCTAL_LINE_MODE
param   XipTransferType:
          - XSPI_INST_ADDR_SINGLE_LINE
          - XSPI_INST_SINGLE_LINE_ADDR_MULTI_LINE
          - XSPI_INST_ADDR_MULTI_LINE
param   XipAddrLen:
         For XIP Read Mode:
          - XSPI_NO_ADDR_PHASE
          - XSPI_ADDR_LEN_4BIT
          - XSPI_ADDR_LEN_8BIT
          - XSPI_ADDR_LEN_12BIT
          - XSPI_ADDR_LEN_16BIT
          - XSPI_ADDR_LEN_20BIT
          - XSPI_ADDR_LEN_24BIT
          - XSPI_ADDR_LEN_28BIT
          - XSPI_ADDR_LEN_32BIT
          - XSPI_ADDR_LEN_36BIT
          - XSPI_ADDR_LEN_40BIT
          - XSPI_ADDR_LEN_44BIT
          - XSPI_ADDR_LEN_48BIT
          - XSPI_ADDR_LEN_52BIT
          - XSPI_ADDR_LEN_56BIT
          - XSPI_ADDR_LEN_60BIT

         For XIP Read Mode:
          - XSPI_NO_ADDR_PHASE
          - XSPI_ADDR_LEN_4BIT
          - XSPI_ADDR_LEN_8BIT
          - XSPI_ADDR_LEN_12BIT
          - XSPI_ADDR_LEN_16BIT
          - XSPI_ADDR_LEN_20BIT
          - XSPI_ADDR_LEN_24BIT
          - XSPI_ADDR_LEN_28BIT
          - XSPI_ADDR_LEN_32BIT
param   XipWaitCycles:
          - XSPI_WAIT_0_CYCLES
          - XSPI_WAIT_1_CYCLES
          - XSPI_WAIT_2_CYCLES
          - XSPI_WAIT_3_CYCLES
          - XSPI_WAIT_4_CYCLES
          - XSPI_WAIT_5_CYCLES
          - XSPI_WAIT_6_CYCLES
          - XSPI_WAIT_7_CYCLES
          - XSPI_WAIT_8_CYCLES
          - XSPI_WAIT_9_CYCLES
          - XSPI_WAIT_10_CYCLES
          - XSPI_WAIT_11_CYCLES
          - XSPI_WAIT_12_CYCLES
          - XSPI_WAIT_13_CYCLES
          - XSPI_WAIT_14_CYCLES
          - XSPI_WAIT_15_CYCLES
          - XSPI_WAIT_16_CYCLES
          - XSPI_WAIT_17_CYCLES
          - XSPI_WAIT_18_CYCLES
          - XSPI_WAIT_19_CYCLES
          - XSPI_WAIT_20_CYCLES
          - XSPI_WAIT_21_CYCLES
          - XSPI_WAIT_22_CYCLES
          - XSPI_WAIT_23_CYCLES
          - XSPI_WAIT_24_CYCLES
          - XSPI_WAIT_25_CYCLES
          - XSPI_WAIT_26_CYCLES
          - XSPI_WAIT_27_CYCLES
          - XSPI_WAIT_28_CYCLES
          - XSPI_WAIT_29_CYCLES
          - XSPI_WAIT_30_CYCLES
          - XSPI_WAIT_31_CYCLES
          - XSPI_WAIT_32_CYCLES
param   XipDDREable:
          - XSPI_DDR_DISABLE
          - XSPI_DDR_ENABLE


param   Info:

param     Read_XIPInitType:
             Note: XIP Read Parameter, Configuration is only needed when reading from XIP
param        XipInstructLen:
               - XSPI_NO_INST_PHASE
               - XSPI_INST_LEN_4BIT
               - XSPI_INST_LEN_8BIT
               - XSPI_INST_LEN_16BIT
param        XipInstrctEnable:
               - XSPI_XIP_INSTRUCT_DISABLE
               - XSPI_XIP_INSTRUCT_ENABLE
param        XipDFSHC:
               - XSPI_XIP_DFSHC_DISABLE
               - XSPI_XIP_DFSHC_ENABLE
param        XipPrefetch:
               - XSPI_XIP_PREFETCH_DISABLE
               - XSPI_XIP_PREFETCH_ENABLE
param        XipModeBit:
               - XSPI_XIP_MODE_BIT_DISABLE
               - XSPI_XIP_MODE_BIT_ENABLE
param        XipModeBitLen:
               - XSPI_XIP_MODE_BIT_LEN_2_BIT
               - XSPI_XIP_MODE_BIT_LEN_4_BIT
               - XSPI_XIP_MODE_BIT_LEN_8_BIT
               - XSPI_XIP_MODE_BIT_LEN_16_BIT

param        ContinueTransfer:
             Note: XIP Read Parameter
param          XipContinueTransfer:
                 - XSPI_XIP_CONTINUE_TRANSFER_DISABLE
                 - XSPI_XIP_CONTINUE_TRANSFER_ENABLE
param          XipWatchDogTimeout:
                 - 0 ~ 255, in terms of HCLK

param        DDR_Info:
param          DDR_InitType:
               Note: Configuration is only required for XIP DDR reads
param            TxdDriverEdge:
                   - 0 ~ 255, Max value = (BAUD/2) - 1, BAUDR = CLKDIV[14:0] * 2)
param            XipInstrucDDR:
                   - XSPI_INST_DDR_DISABLE
                   - XSPI_INST_DDR_ENABLE
param            XipRxdsSignal:
                   - XSPI_RXDS_SIGNAL_DISABLE
                   - XSPI_RXDS_SIGNAL_ENABLE

param          Rxds_InitType:
               Note: Configuration is only required for XIP Non-DDR reads
param            RxdSamplingEdge:
                   - XSPI_RXD_HCLK_RISING_SAMPLING
                   - XSPI_RXD_HCLK_FALLING_SAMPLING
param            RxdSampleDelay:
                   - Valid values 0 ~ 255, measured in HCLK


param     Write_XIPInitType:
             Note: XIP Write Parameter, Configuration is only needed when writing from XIP
param        XipInstructLen:
               - XSPI_NO_INST_PHASE
               - XSPI_INST_LEN_4BIT
               - XSPI_INST_LEN_8BIT
               - XSPI_INST_LEN_16BIT

param        DDR_InitType:
             Note: Configuration is only required for XIP DDR writes
param          TxdDriverEdge:
                 - 0 ~ 255, Max value = (BAUD/2) - 1, BAUDR = CLKDIV[14:0] * 2)
param          XipInstrucDDR:
                 - XSPI_INST_DDR_DISABLE
                 - XSPI_RXDS_SIGNAL_ENABLE

return  none

使用提示: 源码注释的 name 字段写作 XSPI_InitEnhanced.,与函数名 XSPI_InitXIP 不一致,按函数名调用即可。

void XSPI_InitHyperbus(XSPI_Module *xSPIx, XSPI_HyperbusInitType* XSPI_HyperbusInitStruct)按 Hyperbus 初始化结构配置 XSPI。
源码注释
name    XSPI_InitHyperbus.
fun     Initilizes the Hyperbus mode.
param   Baudr:
          - Any even number between 2 and 65534
param   TransferMode:
          - XSPI_TX_ONLY_MODE
          - XSPI_RX_ONLY_MODE
param   DataFrameSize:
          - XSPI_FRAME_SIZE_4_BIT
          - XSPI_FRAME_SIZE_5_BIT
          - XSPI_FRAME_SIZE_6_BIT
          - XSPI_FRAME_SIZE_7_BIT
          - XSPI_FRAME_SIZE_8_BIT
          - XSPI_FRAME_SIZE_9_BIT
          - XSPI_FRAME_SIZE_10_BIT
          - XSPI_FRAME_SIZE_11_BIT
          - XSPI_FRAME_SIZE_12_BIT
          - XSPI_FRAME_SIZE_13_BIT
          - XSPI_FRAME_SIZE_14_BIT
          - XSPI_FRAME_SIZE_15_BIT
          - XSPI_FRAME_SIZE_16_BIT
          - XSPI_FRAME_SIZE_17_BIT
          - XSPI_FRAME_SIZE_18_BIT
          - XSPI_FRAME_SIZE_19_BIT
          - XSPI_FRAME_SIZE_20_BIT
          - XSPI_FRAME_SIZE_21_BIT
          - XSPI_FRAME_SIZE_22_BIT
          - XSPI_FRAME_SIZE_23_BIT
          - XSPI_FRAME_SIZE_24_BIT
          - XSPI_FRAME_SIZE_25_BIT
          - XSPI_FRAME_SIZE_26_BIT
          - XSPI_FRAME_SIZE_27_BIT
          - XSPI_FRAME_SIZE_28_BIT
          - XSPI_FRAME_SIZE_29_BIT
          - XSPI_FRAME_SIZE_30_BIT
          - XSPI_FRAME_SIZE_31_BIT
          - XSPI_FRAME_SIZE_32_BIT
param   WaitCycles:
          - XSPI_WAIT_0_CYCLES
          - XSPI_WAIT_1_CYCLES
          - XSPI_WAIT_2_CYCLES
          - XSPI_WAIT_3_CYCLES
          - XSPI_WAIT_4_CYCLES
          - XSPI_WAIT_5_CYCLES
          - XSPI_WAIT_6_CYCLES
          - XSPI_WAIT_7_CYCLES
          - XSPI_WAIT_8_CYCLES
          - XSPI_WAIT_9_CYCLES
          - XSPI_WAIT_10_CYCLES
          - XSPI_WAIT_11_CYCLES
          - XSPI_WAIT_12_CYCLES
          - XSPI_WAIT_13_CYCLES
          - XSPI_WAIT_14_CYCLES
          - XSPI_WAIT_15_CYCLES
          - XSPI_WAIT_16_CYCLES
          - XSPI_WAIT_17_CYCLES
          - XSPI_WAIT_18_CYCLES
          - XSPI_WAIT_19_CYCLES
          - XSPI_WAIT_20_CYCLES
          - XSPI_WAIT_21_CYCLES
          - XSPI_WAIT_22_CYCLES
          - XSPI_WAIT_23_CYCLES
          - XSPI_WAIT_24_CYCLES
          - XSPI_WAIT_25_CYCLES
          - XSPI_WAIT_26_CYCLES
          - XSPI_WAIT_27_CYCLES
          - XSPI_WAIT_28_CYCLES
          - XSPI_WAIT_29_CYCLES
          - XSPI_WAIT_30_CYCLES
          - XSPI_WAIT_31_CYCLES
          - XSPI_WAIT_32_CYCLES
param   CAPhaseRxds:
          - XSPI_HYPERBUS_CA_RXDS_DISABLE
          - XSPI_HYPERBUS_CA_RXDS_ENABLE
param   ClockStrech:
          - XSPI_CLOCK_STRETCH_DISABLE
          - XSPI_CLOCK_STRETCH_ENABLE
param   TxdDriverEdge:
          - 0 ~ 255, Max value = (BAUD/2) - 1, BAUDR = CLKDIV[14:0] * 2)
param   XIPHyperbus:
          - XSPI_XIP_HYPERBUS_MODE
          - XSPI_NON_XIP_HYPERBUS_MODE

param   XIP_ReadHyperbusInitType:
          Note: XIP Hyperbus Read Parameters
param       XipFixDFS:
              - XSPI_XIP_DFSHC_DISABLE
              - XSPI_XIP_DFSHC_ENABLE
param       XipPrefetch:
              - XSPI_XIP_PREFETCH_DISABLE
              - XSPI_XIP_PREFETCH_ENABLE

return  none
void XSPI_StructBaseInit(XSPI_InitType* XSPI_StandInitStruct)把基础初始化结构体的每个成员填充为默认值。
源码注释
name    XSPI_StructBaseInit.
fun     Fills each XSPI_InitType member with its default value.
param   XSPI_InitType (The input parameters must be the following values):
          - SCPH
          - SCPOL
          - FrameFormat
          - DataFrameSize
          - TransferMode
          - Role
          - Baudr
          - RxdSamplingEdge
          - RxdSampleDelay
          - NssToggle
          - EnhSlave_ClockStrech
return  none
void XSPI_InitEnhancedStruct(XSPI_EnhancedInitType* XSPI_EnhancedInitStruct)把增强型初始化结构体的每个成员填充为默认值。
源码注释
name    XSPI_InitEnhancedStruct.
fun     Fills each XSPI_EnhancedInitType member with its default value.
param   XSPI_EnhancedInitType (The input parameters must be the following values):
          - SCPH
          - SCPOL
          - FrameFormat
          - DataFrameSize
          - TransferMode
          - Baudr
          - RxdSamplingEdge
          - RxdSampleDelay
          - TransferType
          - AddrLen
          - InstructLen
          - WaitCycles
          - ClockStrech
          - DDREable
          - InstrucDDR
          - RxdsSignal
          - TxdDataMask
          - TxdDriverEdge
return  none
void XSPI_InitXIPStruct(XSPI_XIPInitType* XSPI_XIPInitStruct)把 XIP 初始化结构体的每个成员填充为默认值。
源码注释
name    XSPI_InitXIPStruct.
fun     Fills each XSPI_XIPInitType member with its default value.
param   XSPI_XIPInitType (The input parameters must be the following values):
          - SCPH
          - SCPOL
          - DataFrameSize
          - TransferMode
          - Baudr
          - XipFrameFormat
          - XipTransferType
          - XipAddrLen
          - XipWaitCycles
          - XipDDREable
          - XIP_Info
            XIP Read Parameter:
            - XipInstructLen
            - XipInstrctEnable
            - Info
              DDR Parameter:
              - TxdDriverEdge
              - XipInstrucDDR
              - XipRxdsSignal
            - XipDFSHC
            - XipPrefetch
            - XipModeBit
            - XipModeBitLen
            - ContinueTransfer
              Continue Transfer Parameter:
              - XipContinueTransfer
              - XipWatchDogTimeout
return  none
void XSPI_InitHyperbusStruct(XSPI_HyperbusInitType* XSPI_HyperbusInitStruct)把 Hyperbus 初始化结构体的每个成员填充为默认值。
源码注释
name    XSPI_InitHyperbusStruct.
fun     Fills each XSPI_HyperbusInitType member with its default value.
param   XSPI_HyperbusInitType (The input parameters must be the following values):
          - Baudr
          - TransferMode
          - DataFrameSize
          - WaitCycles
          - CAPhaseRxds
          - ClockStrech
          - TxdDriverEdge
          - XIPHyperbus

          - XIP_ReadHyperbusInitType
            XIP Hyperbus Read Parameter:
            - XipFixDFS
            - XipPrefetch
return  none
void XSPI_EnableHyperbus(XSPI_Module* xSPIx, FunctionalState cmd)使能或禁止 XSPI Hyperbus。
源码注释
name    XSPI_EnableHyperbus.
fun     Control XSPI Hyperbus function switch.
param   cmd
          - ENABLE
          - DISABLE
return  none
void XSPI_EnableXIPHyperbusRead(XSPI_Module* xSPIx, FunctionalState cmd)使能或禁止 XIP Hyperbus 读。
源码注释
name    XSPI_EnableXIPHyperbusRead.
fun     Control XSPI XIP Hyperbus Read function switch.
param   cmd
          - ENABLE
          - DISABLE
return  none
void XSPI_EnableXIPHyperbusWrite(XSPI_Module* xSPIx, FunctionalState cmd)使能或禁止 XIP Hyperbus 写。
源码注释
name    XSPI_EnableXIPHyperbusWrite.
fun     Control XSPI XIP Hyperbus Write function switch.
param   cmd
          - ENABLE
          - DISABLE
return  none
void XSPI_SetNumberOfDataFrame(XSPI_Module* xSPIx, uint32_t NumDataFrame)设置数据帧数量。
源码注释
name    XSPI_SetNumberOfDataFrame.
fun     Set Number of Data Frames.
param   NumDataFrame
          - 1 ~ 65536
return  none
void XSPI_EnableClockStrech(XSPI_Module* xSPIx, FunctionalState cmd)使能或禁止时钟延长。
源码注释
name    XSPI_EnableClockStrech.
fun     Control XSPI Clock Strech function switch.
param   cmd
          - ENABLE
          - DISABLE
return  none
void XSPI_EnableDataMask(XSPI_Module* xSPIx, FunctionalState cmd)使能或禁止数据掩码。
源码注释
name    XSPI_EnableDataMask.
fun     Control XSPI Data Mask function switch.
param   cmd
          - ENABLE
          - DISABLE
return  none
void XSPI_Enable(XSPI_Module* xSPIx, FunctionalState cmd)使能或禁止 XSPI。
源码注释
name    XSPI_Enable.
fun     Control XSPI function switch.
param   cmd
          - ENABLE
          - DISABLE
return  none
void XSPI_Slave_Select(XSPI_Module* xSPIx, uint32_t Slave)选择从设备片选。
源码注释
name    XSPI_Slave_Select.
fun     Slave Select Enable.
param   Slave:
          - XSPI_NO_SELECT_SLAVE
          - XSPI_SELECT_SLAVE_1
          - XSPI_SELECT_SLAVE_2

return  none
void XSPI_XIP_Slave_Select(XSPI_Module* xSPIx, uint32_t Slave)在 XIP 模式下选择从设备片选。
源码注释
name    XSPI_XIP_Slave_Select.
fun     XIP Mode Slave Select Enable.
param   Slave:
          - XSPI_NO_SELECT_SLAVE
          - XSPI_SELECT_SLAVE_1
          - XSPI_SELECT_SLAVE_2

return  none
void XSPI_SetTXStartFIFOThreshold(XSPI_Module* xSPIx, uint32_t fifo_level)设置发送启动 FIFO 阈值。
源码注释
name    XSPI_SetTXStartFIFOThreshold.
fun     Set Transfer start FIFO Threshold
param   fifo_level:
          - XSPI_FIFO_THRESHOLD_LEVEL0
          - XSPI_FIFO_THRESHOLD_LEVEL1
          - XSPI_FIFO_THRESHOLD_LEVEL2
          - XSPI_FIFO_THRESHOLD_LEVEL3
          - XSPI_FIFO_THRESHOLD_LEVEL4
          - XSPI_FIFO_THRESHOLD_LEVEL5
          - XSPI_FIFO_THRESHOLD_LEVEL6
          - XSPI_FIFO_THRESHOLD_LEVEL7
          - XSPI_FIFO_THRESHOLD_LEVEL8
          - XSPI_FIFO_THRESHOLD_LEVEL9
          - XSPI_FIFO_THRESHOLD_LEVEL10
          - XSPI_FIFO_THRESHOLD_LEVEL11
          - XSPI_FIFO_THRESHOLD_LEVEL12
          - XSPI_FIFO_THRESHOLD_LEVEL13
          - XSPI_FIFO_THRESHOLD_LEVEL14
          - XSPI_FIFO_THRESHOLD_LEVEL15
return  none
uint16_t XSPI_GetTXStartFIFOThreshold(XSPI_Module* xSPIx)获取发送启动 FIFO 阈值。
源码注释
name    XSPI_GetTXStartFIFOThreshold.
fun     Get Transfer start FIFO Threshold
param   fifo_level:
return  Transfer start FIFO Threshold
void XSPI_SetTXFIFOEmptyThreshold(XSPI_Module* xSPIx, uint32_t fifo_level)设置发送 FIFO 空阈值。
源码注释
name    XSPI_SetTXFIFOEmptyThreshold.
fun     Set Transmit FIFO Empty Threshold
not     When the value is less than or equal to this threshold, a transmit FIFO empty interrupt is triggered.
param   fifo_level:
          - XSPI_FIFO_THRESHOLD_LEVEL0
          - XSPI_FIFO_THRESHOLD_LEVEL1
          - XSPI_FIFO_THRESHOLD_LEVEL2
          - XSPI_FIFO_THRESHOLD_LEVEL3
          - XSPI_FIFO_THRESHOLD_LEVEL4
          - XSPI_FIFO_THRESHOLD_LEVEL5
          - XSPI_FIFO_THRESHOLD_LEVEL6
          - XSPI_FIFO_THRESHOLD_LEVEL7
          - XSPI_FIFO_THRESHOLD_LEVEL8
          - XSPI_FIFO_THRESHOLD_LEVEL9
          - XSPI_FIFO_THRESHOLD_LEVEL10
          - XSPI_FIFO_THRESHOLD_LEVEL11
          - XSPI_FIFO_THRESHOLD_LEVEL12
          - XSPI_FIFO_THRESHOLD_LEVEL13
          - XSPI_FIFO_THRESHOLD_LEVEL14
          - XSPI_FIFO_THRESHOLD_LEVEL15
return  none
uint16_t XSPI_GetTXFIFOEmptyThreshold(XSPI_Module* xSPIx)获取发送 FIFO 空阈值。
源码注释
name    XSPI_GetTXFIFOEmptyThreshold.
fun     Get Transmit FIFO Empty Threshold
param   fifo_level:
return  Transmit FIFO Empty Threshold
void XSPI_SetRXFIFOFullThreshold(XSPI_Module* xSPIx, uint32_t fifo_level)设置接收 FIFO 满阈值。
源码注释
name    XSPI_SetRXFIFOFullThreshold.
fun     Set Receive FIFO Full Threshold
not     When the data number is greater than or equal to (this threshold + 1), triggered receive FIFO full interrupt.
param   fifo_level:
          - XSPI_FIFO_THRESHOLD_LEVEL0
          - XSPI_FIFO_THRESHOLD_LEVEL1
          - XSPI_FIFO_THRESHOLD_LEVEL2
          - XSPI_FIFO_THRESHOLD_LEVEL3
          - XSPI_FIFO_THRESHOLD_LEVEL4
          - XSPI_FIFO_THRESHOLD_LEVEL5
          - XSPI_FIFO_THRESHOLD_LEVEL6
          - XSPI_FIFO_THRESHOLD_LEVEL7
          - XSPI_FIFO_THRESHOLD_LEVEL8
          - XSPI_FIFO_THRESHOLD_LEVEL9
          - XSPI_FIFO_THRESHOLD_LEVEL10
          - XSPI_FIFO_THRESHOLD_LEVEL11
          - XSPI_FIFO_THRESHOLD_LEVEL12
          - XSPI_FIFO_THRESHOLD_LEVEL13
          - XSPI_FIFO_THRESHOLD_LEVEL14
          - XSPI_FIFO_THRESHOLD_LEVEL15
return  none
uint16_t XSPI_GetRXFIFOFullThreshold(XSPI_Module* xSPIx)获取接收 FIFO 满阈值。
源码注释
name    XSPI_GetRXFIFOFullThreshold.
fun     Get Receive FIFO Full Threshold
param   fifo_level:
return  Receive FIFO Full Threshold
uint16_t XSPI_GetTXFIFODataNum(XSPI_Module* xSPIx)获取发送 FIFO 中的数据个数。
源码注释
name    XSPI_GetTXFIFODataNum.
fun     Get Transmit FIFO Data Number
note    Contains the number of valid data entries in the transmit FIFO
param   fifo_level:
return  Transmit FIFO Data Number
uint16_t XSPI_GetRXFIFODataNum(XSPI_Module* xSPIx)获取接收 FIFO 中的数据个数。
源码注释
name    XSPI_GetRXFIFODataNum.
fun     Get Receive FIFO Data Number
note    Contains the number of valid data entries in the receive FIFO
param   fifo_level:
return  Receive FIFO Data Number
uint32_t XSPI_GetDataPointer(XSPI_Module* xSPIx)获取 XSPI DAT0 寄存器的指针。
源码注释
name    XSPIGetDataPointer.
fun     Get Pointer of XSPI DAT0 register.
return  The pointer of XSPI DAT0 register.

使用提示: 源码注释的 name 字段写作 XSPIGetDataPointer.,与函数名 XSPI_GetDataPointer 不一致,按函数名调用即可。

void XSPI_SendData(XSPI_Module* xSPIx, uint32_t SendData)向 XSPI DAT 寄存器写入一个数据以发送。
源码注释
name    XSPI_SendData.
fun     Write one data direct to XSPI DAT register to send.
param   SendData:
          - data to be send
return  none
uint32_t XSPI_ReceiveData(XSPI_Module* xSPIx)从 XSPI DAT0 寄存器读取一个数据。
源码注释
name    XSPI_ReceiveData.
fun     Read one data from XSPI DAT0 register.
return  The value of XSPI DAT0 register.
void XSPI_ClearRxFIFO(XSPI_Module* xSPIx)清空接收 FIFO。
源码注释
name    XSPI_ClearRxFIFO.
fun     Clear RX FIFO
return  none
void XSPI_EnableDma(XSPI_Module* xSPIx, uint16_t XSPI_DMAReq, FunctionalState Cmd)使能或禁止 XSPI 的 DMA 接口。
源码注释
name    XSPI_EnableDma.
fun     Enables or disables the XSPI DMA interface.
param   xSPIx :
param   XSPI_DMAReq :
         - XSPI_DMA_TX
         - XSPI_DMA_RX
param   Cmd :
         - ENABLE
         - DISABLE
return  none
void XSPI_SetDMATxFIFOThreshold(XSPI_Module* xSPIx, uint32_t fifo_level)设置 DMA 发送 FIFO 阈值。
源码注释
name    XSPI_SetDMATxFIFOThreshold.
fun     Set DMA Tx FIFO Threshold
param   fifo_level:
          - XSPI_FIFO_THRESHOLD_LEVEL0
          - XSPI_FIFO_THRESHOLD_LEVEL1
          - XSPI_FIFO_THRESHOLD_LEVEL2
          - XSPI_FIFO_THRESHOLD_LEVEL3
          - XSPI_FIFO_THRESHOLD_LEVEL4
          - XSPI_FIFO_THRESHOLD_LEVEL5
          - XSPI_FIFO_THRESHOLD_LEVEL6
          - XSPI_FIFO_THRESHOLD_LEVEL7
          - XSPI_FIFO_THRESHOLD_LEVEL8
          - XSPI_FIFO_THRESHOLD_LEVEL9
          - XSPI_FIFO_THRESHOLD_LEVEL10
          - XSPI_FIFO_THRESHOLD_LEVEL11
          - XSPI_FIFO_THRESHOLD_LEVEL12
          - XSPI_FIFO_THRESHOLD_LEVEL13
          - XSPI_FIFO_THRESHOLD_LEVEL14
          - XSPI_FIFO_THRESHOLD_LEVEL15
return  none
uint16_t XSPI_GetDMATxFIFOThreshold(XSPI_Module* xSPIx)获取 DMA 发送 FIFO 阈值。
源码注释
name    XSPI_GetDMATxFIFOThreshold.
fun     Get DMA Tx FIFO Threshold
param   fifo_level:
return  DMA Tx FIFO Threshold
void XSPI_SetDMARxFIFOThreshold(XSPI_Module* xSPIx, uint32_t fifo_level)设置 DMA 接收 FIFO 阈值。
源码注释
name    XSPI_SetDMARxFIFOThreshold.
fun     Set DMA Rx FIFO Threshold
not     dma_rx_req is generated when the number of valid data entries in the receive FIFO is equal to or above this field value + 1
param   fifo_level:
          - XSPI_FIFO_THRESHOLD_LEVEL0
          - XSPI_FIFO_THRESHOLD_LEVEL1
          - XSPI_FIFO_THRESHOLD_LEVEL2
          - XSPI_FIFO_THRESHOLD_LEVEL3
          - XSPI_FIFO_THRESHOLD_LEVEL4
          - XSPI_FIFO_THRESHOLD_LEVEL5
          - XSPI_FIFO_THRESHOLD_LEVEL6
          - XSPI_FIFO_THRESHOLD_LEVEL7
          - XSPI_FIFO_THRESHOLD_LEVEL8
          - XSPI_FIFO_THRESHOLD_LEVEL9
          - XSPI_FIFO_THRESHOLD_LEVEL10
          - XSPI_FIFO_THRESHOLD_LEVEL11
          - XSPI_FIFO_THRESHOLD_LEVEL12
          - XSPI_FIFO_THRESHOLD_LEVEL13
          - XSPI_FIFO_THRESHOLD_LEVEL14
          - XSPI_FIFO_THRESHOLD_LEVEL15
return  none
uint16_t XSPI_GetDMARxFIFOThreshold(XSPI_Module* xSPIx)获取 DMA 接收 FIFO 阈值。
源码注释
name    XSPI_GetDMARxFIFOThreshold.
fun     Get DMA Rx FIFO Threshold
param   fifo_level:
return  DMA Rx FIFO Threshold
uint32_t XSPI_GetDMACompletedDataFrameNum(XSPI_Module* xSPIx)获取 DMA 已完成的数据帧数。
源码注释
name    XSPI_GetDMACompletedDataFrameNum.
fun     Get Completed Data frames.
note    indicates total data frames transferred in the previous internal DMA transfer
param   Flag:
return  The new state of XSPI_FLAG (SET or RESET).
uint32_t XSPI_GetIdentification(XSPI_Module* xSPIx)获取识别码。
源码注释
name    XSPI_GetIdentification.
fun     Get Identification code
param   fifo_level:
return  Identification code
uint32_t XSPI_GetComponentVersion(XSPI_Module* xSPIx)获取组件版本。
源码注释
name    XSPI_GetComponentVersion.
fun     Get component version
param   fifo_level:
return  component version
void XSPI_SetXIPModeBit(XSPI_Module* xSPIx, uint16_t mode_bit)设置 XIP 传输中地址阶段后发送的 XIP 模式位。
源码注释
name    XSPI_SetXIPModeBit.
fun     Set XIP mode bits to be sent after address phase of XIP transfer
param   mode_bit:  0x0000 ~ 0xFFFF
return  none
void XSPI_SetXIPReadIncrOpcode(XSPI_Module* xSPIx, uint16_t opcode)设置 AHB 总线请求 INCR 类型读传输时发送的指令操作码。
源码注释
name    XSPI_SetXIPReadIncrOpcode.
fun     Set instruction op-code to be sent when an INCR type transfer is requested on AHB bus.
param   opcode:  0x0000 ~ 0xFFFF
note    The effective length of the op-code is configured by XIP_CTRL.INSTL[1:0]
return  none
void XSPI_SetXIPReadWrapOpcode(XSPI_Module* xSPIx, uint16_t opcode)设置 AHB 总线请求 WRAP 类型读传输时发送的指令操作码。
源码注释
name    XSPI_SetXIPReadWrapOpcode.
fun     Set instruction op-code to be sent when an WRAP type transfer is requested on AHB bus.
param   opcode:  0x0000 ~ 0xFFFF
note    The effective length of the op-code is configured by XIP_CTRL.INSTL[1:0]
return  none
void XSPI_SetXIPWriteIncrOpcode(XSPI_Module* xSPIx, uint16_t opcode)设置 AHB 总线请求 INCR 类型写传输时发送的指令操作码。
源码注释
name    XSPI_SetXIPReadIncrOpcode.
fun     Set the instruction op-code to be sent when an INCR type XIP Write transfer is requested on AHB bus.
param   opcode:  0x0000 ~ 0xFFFF
note    The effective length of the op-code is configured by XIP_CTRL.INSTL[1:0]
return  none

使用提示: 源码注释的 name 字段写作 XSPI_SetXIPReadIncrOpcode.,与函数名 XSPI_SetXIPWriteIncrOpcode 不一致,按函数名调用即可。

void XSPI_SetXIPWriteWrapOpcode(XSPI_Module* xSPIx, uint16_t opcode)设置 AHB 总线请求 WRAP 类型写传输时发送的指令操作码。
源码注释
name    XSPI_SetXIPWriteWrapOpcode.
fun     Set the instruction op-code to be sent when an WRAP type XIP Write transfer is requested on AHB bus.
param   opcode:  0x0000 ~ 0xFFFF
note    The effective length of the op-code is configured by XIP_CTRL.INSTL[1:0]
return  none
FlagStatus XSPI_GetFlagStatus(XSPI_Module* xSPIx, uint32_t Flag)检查指定的 XSPI 标志是否置位。
源码注释
name    XSPI_GetFlagStatus.
fun     Checks whether the specified XSPI flag is set or not.
param   Flag:
          - XSPI_BUSY_FLAG
          - XSPI_TXFNF_FLAG
          - XSPI_TXFE_FLAG
          - XSPI_RXFNF_FLAG
          - XSPI_RXFF_FLAG
          - XSPI_TXE_FLAG
          - XSPI_DCERR_FLAG
return  The new state of XSPI_FLAG (SET or RESET).
void XSPI_DisbaleAllInt(XSPI_Module* xSPIx)禁止 XSPI 的全部中断。
源码注释
name    XSPI_DisbaleAllInt.
fun     Disables the all XSPI interrupts.
param   XSPI_IT:
return  none.
void XSPI_EnableInt(XSPI_Module* xSPIx, uint32_t XSPI_IT, FunctionalState Cmd)使能或禁止指定的 XSPI 中断。
源码注释
name    XSPI_ConfigInt.
fun     Enables or disables the specified XSPI interrupts.
param   XSPI_IT:
          - XSPI_INT_TXFEMPTY
          - XSPI_INT_TXFOVER
          - XSPI_INT_RXFUNDER
          - XSPI_INT_RXFOVER
          - XSPI_INT_RXFFULL
          - XSPI_INT_MMCONTENTION
          - XSPI_INT_XIP_RXFOVER
          - XSPI_INT_TXFUNDER
param   Cmd:
          - ENABLE
          - DISABLE
return  none.

使用提示: 源码注释的 name 字段写作 XSPI_ConfigInt.,与函数名 XSPI_EnableInt 不一致,按函数名调用即可。

INTStatus XSPI_GetINTStatus(XSPI_Module* xSPIx, uint32_t XSPI_IT)检查指定的 XSPI 中断是否发生。
源码注释
name    XSPI_GetINTStatus.
fun     Checks whether the specified XSPI interrupt has occurred or not.
param   XSPI_IT:
          - XSPI_INT_TXFEMPTY
          - XSPI_INT_TXFOVER
          - XSPI_INT_RXFUNDER
          - XSPI_INT_RXFOVER
          - XSPI_INT_RXFFULL
          - XSPI_INT_MMCONTENTION
          - XSPI_INT_XIP_RXFOVER
          - XSPI_INT_TXFUNDER
return  The new state of XSPI_IT (SET or RESET).
INTStatus XSPI_GetINTRawStatus(XSPI_Module* xSPIx, uint32_t XSPI_IT)获取 XSPI 的原始中断状态。
源码注释
name    XSPI_GetINTRawStatus.
fun     Get XSPI Raw Interrupt Status.
param   XSPI_IT:
          - XSPI_INT_TXFEMPTY
          - XSPI_INT_TXFOVER
          - XSPI_INT_RXFUNDER
          - XSPI_INT_RXFOVER
          - XSPI_INT_RXFFULL
          - XSPI_INT_MMCONTENTION
          - XSPI_INT_XIP_RXFOVER
          - XSPI_INT_TXFUNDER
return  The new state of XSPI_IT (SET or RESET).
void XSPI_ClrITPendingBit(XSPI_Module* xSPIx, uint32_t XSPI_IT)清除指定的 XSPI 中断挂起位。
源码注释
name    XSPI_ClrITPendingBit.
fun     Clears the XSPI interrupt pending bit.
param   XSPI_IT:
          - XSPI_INT_TXFOVER
          - XSPI_INT_RXFUNDER
          - XSPI_INT_RXFOVER
          - XSPI_INT_MMCONTENTION
          - XSPI_INT_XIP_RXFOVER
          - XSPI_INT_TXFUNDER
return  none.
void XSPI_ClrITAllPendingBit(XSPI_Module* xSPIx)清除 XSPI 的全部中断挂起位。
源码注释
name    XSPI_ClrITAllPendingBit.
fun     Clears the XSPI interrupt all pending bit.
param   XSPI_IT:
return  none.

5.34.3 Demo 示例说明

本节说明 XSPI_V2 的 2 个示例:XSPI_Enhanced_Mode 在增强型模式下用轮询、中断与 DMA 三条路径读写外置 Flash,XSPI_XIP_Mode 用内存映射方式读写外置 Flash。

5.34.3.1 XSPI_Enhanced_Mode 增强模式读写外置 Flash

工程目录: projects/n32h49x_EVAL/examples/XSPI_V2/XSPI_Enhanced_Mode/

初始化日志、时钟与 GPIO→置 QE 使能四线并擦除扇区→写入并轮询读回比较→用中断方式读回并比较→用 DMA 写、读并比较

项目 源码解读
功能 在增强型 SPI 模式下完成外置 Flash 的擦除、写、读;
分别用轮询、中断与 DMA 三条路径读回并比较读写一致性。
源码组成 src/main.c:main、Delay;
src/xspi_flash.c:RCC_Configuration、Hardware_Configuration、DMA_Configuration、XSPI_Standard_Mode_Config、XSPI_Enhanced_Mode_Config、Flash_Read_Buffer_DMA 等;
src/n32h49x_it.c:XSPI_IRQHandler;
inc/main.h、inc/xspi_flash.h:宏与声明;
readme.txt、MDK-ARM/、EWARM/:说明与工程文件。
关键配置 标准模式:XSPI_InitBase 配 XSPI_FRAME_SIZE_8_BIT 与收发模式;
增强模式:XSPI_InitEnhanced 配 XSPI_QUAD_LINE_MODE、XSPI_FRAME_SIZE_32_BIT、XSPI_RX_ONLY_MODE;
中断:XSPI_EnableInt(XSPI, XSPI_INT_RXFFULL, ENABLE) 与 XSPI_SetRXFIFOFullThreshold;
DMA:XSPI_EnableDma 与 DMA_Configuration(DMA1_CH1/DMA1_CH2)。
程序与数据路径 main 配好时钟与引脚后置 QE 使能四线;
擦除扇区后写入数据,再轮询读回比较;
以接收 FIFO 满中断读回,中断服务程序中取数;
用 DMA 完成写与读并比较。
主要 API XSPI_InitBase、XSPI_InitEnhanced、XSPI_EnableInt、XSPI_EnableDma、XSPI_SendData、XSPI_ReceiveData
验证方法 串口分别打印 Write data and Read data succeed、Interrupt-Read data succeed、DMA Write data and DMA Read data succeed 表示三条路径数据一致;
任一比较失败会打印对应的错误信息。
使用提示 标准模式与增强模式各自需重新调用 XSPI_Standard_Mode_Config、XSPI_Enhanced_Mode_Config 配置;
中断读依赖 XSPI_IRQHandler 与 XSPI_INT_RXFFULL,DMA 读等待 DMA_FLAG_TC2;
示例默认以 P25Q40 外置 Flash 与全功能板为准。
核心代码解读与移植

示例在同一份数据上分别用轮询、中断与 DMA 三条路径读写外置 Flash,并逐条比较结果。

数据路径: XSPI_Standard_Mode_Config 进入标准模式 → Flash_Quad_Mode_Enable 置 QE → Flash_Sector_Erase 擦除扇区 → Flash_Write_Buffer 写入、Flash_Read_Buffer 轮询读回 → Flash_Read_Buffer_Int 与中断服务程序读取 → Flash_Write_Buffer_DMA、Flash_Read_Buffer_DMA 用 DMA 搬运

1. 标准模式初始化。 XSPI_Standard_Mode_Config 填充基础初始化结构体并调用 XSPI_InitBase,用于寄存器读写阶段的单线访问。

src/xspi_flash.csrc/xspi_flash.c · XSPI_Standard_Mode_Config
void XSPI_Standard_Mode_Config(uint32_t DataFrameSize, uint32_t TransferMode, uint32_t Baudr)
{
    XSPI_InitType StandInitStruct;

    XSPI_Enable(XSPI, DISABLE);

    XSPI_StructBaseInit(&StandInitStruct);

    StandInitStruct.Role            = XSPI_MASTER_ROLE;
    StandInitStruct.DataFrameSize   = DataFrameSize;
    StandInitStruct.SCPH            = XSPI_SCPH_FIRST_EDGE;
    StandInitStruct.SCPOL           = XSPI_SCPOL_LOW_LEVEL;
    StandInitStruct.TransferMode    = TransferMode;
    StandInitStruct.Baudr           = Baudr;
    StandInitStruct.NssToggle       = XSPI_NSS_TOGGLE_DISABLE;
    StandInitStruct.RxdSamplingEdge = XSPI_RXD_HCLK_RISING_SAMPLING;
    StandInitStruct.RxdSampleDelay  = Baudr / 2;
    XSPI_InitBase(XSPI, &StandInitStruct);

    XSPI_Slave_Select(XSPI, XSPI_SELECT_SLAVE_1);
}

2. 增强模式初始化。 XSPI_Enhanced_Mode_Config 在基础配置之外再设置帧格式、传输类型与等待周期,用于四线数据访问。

src/xspi_flash.csrc/xspi_flash.c · XSPI_Enhanced_Mode_Config
void XSPI_Enhanced_Mode_Config(uint32_t DataFrameSize, uint32_t TransferMode, uint32_t FrameFormat, uint32_t TransferType, uint32_t Baudr, uint32_t WaitCycles)
{
    XSPI_EnhancedInitType  EnhancedInitStruct;

    XSPI_Enable(XSPI, DISABLE);

    XSPI_InitEnhancedStruct(&EnhancedInitStruct);

    EnhancedInitStruct.SCPH            = XSPI_SCPH_FIRST_EDGE;
    EnhancedInitStruct.SCPOL           = XSPI_SCPOL_LOW_LEVEL;
    EnhancedInitStruct.FrameFormat     = FrameFormat;
    EnhancedInitStruct.DataFrameSize   = DataFrameSize;
    EnhancedInitStruct.TransferMode    = TransferMode;
    EnhancedInitStruct.Baudr           = Baudr;
    EnhancedInitStruct.RxdSamplingEdge = XSPI_RXD_HCLK_RISING_SAMPLING;
    EnhancedInitStruct.RxdSampleDelay  = 3U;

    EnhancedInitStruct.TransferType    = TransferType;
    EnhancedInitStruct.AddrLen         = XSPI_ADDR_LEN_24BIT;
    EnhancedInitStruct.InstructLen     = XSPI_INST_LEN_8BIT;
    EnhancedInitStruct.WaitCycles      = WaitCycles;
    EnhancedInitStruct.ClockStrech     = XSPI_CLOCK_STRETCH_ENABLE;
    EnhancedInitStruct.DDREable        = XSPI_DDR_DISABLE;

    XSPI_InitEnhanced(XSPI, &EnhancedInitStruct);

    XSPI_Slave_Select(XSPI, XSPI_SELECT_SLAVE_1);
}

3. 中断方式读取与中断服务程序。 Flash_Read_Buffer_Int 使能接收 FIFO 满中断并配置接收模式,每收到一个数据由中断服务程序取走。

src/xspi_flash.csrc/xspi_flash.c · Flash_Read_Buffer_Int
void Flash_Read_Buffer_Int(uint32_t* pBuffer, uint32_t ReadAddr, uint32_t NumWordToRead)
{
    XSPI_DisbaleAllInt(XSPI);
    NVIC_Initialize();
    
    XSPI_EnableInt(XSPI, XSPI_INT_RXFFULL, ENABLE);
    
#ifdef P25Q40
/* Quad SPI Format Mode */
#if (READ_SPI_FORMAT_MODE == READ_QUAD_SPI_FORMAT)
#ifdef ADDR_MUTTI_WIRE_TX
    /*  Instruction will be sent in Standard SPI Mode and Address will be sent in the Quad-wire mode */
    XSPI_Enhanced_Mode_Config(XSPI_FRAME_SIZE_32_BIT, XSPI_RX_ONLY_MODE, XSPI_QUAD_LINE_MODE, XSPI_INST_SINGLE_LINE_ADDR_MULTI_LINE, TEST_WR_CLKDIV, FAST_READ_QUAD_IO_WAIT_CYCLES);
#else
    /* Instruction and Address will be sent in Standard SPI Mode */
    XSPI_Enhanced_Mode_Config(XSPI_FRAME_SIZE_32_BIT, XSPI_RX_ONLY_MODE, XSPI_QUAD_LINE_MODE, XSPI_INST_ADDR_SINGLE_LINE, TEST_WR_CLKDIV, FAST_READ_QUAD_OUTPUT_WAIT_CYCLES);
#endif

中断服务程序在接收 FIFO 满中断中把数据取回缓冲区并累加计数。

src/n32h49x_it.csrc/n32h49x_it.c · XSPI_IRQHandler
void XSPI_IRQHandler(void)
{
    if (XSPI_GetINTStatus(XSPI, XSPI_INT_RXFFULL) == SET)
    {
        XSPI_Rbuffer[rSize] = XSPI_ReceiveData(XSPI);
        rSize++;
    }
}

4. DMA 方式写页。 Flash_Write_Page_DMA 关闭 XSPI 后设置 DMA 发送阈值并使能发送请求,再启动 DMA 搬移数据并等待传输完成。

src/xspi_flash.csrc/xspi_flash.c · Flash_Write_Page_DMA
void Flash_Write_Page_DMA(uint32_t* pBuffer, uint32_t WriteAddr, uint32_t NumWordToWrite)
{
    if(NumWordToWrite != 0)
    {
        Flash_Write_Enable();

        XSPI_Enhanced_Mode_Config(XSPI_FRAME_SIZE_32_BIT, XSPI_TX_ONLY_MODE, XSPI_QUAD_LINE_MODE, XSPI_INST_ADDR_SINGLE_LINE, TEST_WR_CLKDIV, QUAD_INPUT_PAGE_PROGRAM_WAIT_CYCLES);
        XSPI_SetNumberOfDataFrame(XSPI, NumWordToWrite);
        
        XSPI_SetTXStartFIFOThreshold(XSPI, XSPI_FIFO_THRESHOLD_LEVEL4);
        XSPI_SetDMATxFIFOThreshold(XSPI, XSPI_FIFO_THRESHOLD_LEVEL5);
        
        XSPI_EnableDma(XSPI, XSPI_DMA_TX, ENABLE);
        
        XSPI_Enable(XSPI, ENABLE);
        
        XSPI_Waie_Tx_Compelete();
        
        DMA_Configuration((uint32_t)&XSPI->DAT0, (uint32_t)pBuffer, NumWordToWrite, DMA_TX, DISABLE);
#ifdef P25Q40
        XSPI_SendData(XSPI, SPIFLASH_QuadPage_Pro);
        XSPI_SendData(XSPI, WriteAddr);
#else
        /* Other Flash Operation */
#endif
    
        DMA_RequestRemap(DMA_REMAP_XSPI_TX, DMA1_CH1, ENABLE);
        DMA_EnableChannel(DMA1_CH1, ENABLE);
        
        while (XSPI_GetFlagStatus(XSPI, XSPI_TXFE_FLAG) == RESET)
        {
        }
            

        /*wait TX end  */
        while(DMA_GetFlagStatus(DMA_FLAG_TC1,DMA1) == RESET)  /*wait DMA transfer complete*/
        {
        }
        
        DMA_ClearFlag(DMA_FLAG_TC1, DMA1);

        XSPI_Enable(XSPI, DISABLE);
        DMA_Configuration((uint32_t)&XSPI->DAT0, (uint32_t)pBuffer, NumWordToWrite, DMA_TX, DISABLE);
        XSPI_Enable(XSPI, ENABLE);
        
        Flash_Check_Busy();
    }
}

对应源码: src/xspi_flash.c、src/n32h49x_it.c

5.34.3.2 XSPI_XIP_Mode 内存映射方式读写外置 Flash

工程目录: projects/n32h49x_EVAL/examples/XSPI_V2/XSPI_XIP_Mode/

初始化日志、时钟与 GPIO→置 QE 使能四线并擦除扇区→配置 XIP 读并从映射地址读回→配置 XIP 写并逐字写入→读回比较并打印结论

项目 源码解读
功能 在 XIP(内存映射)模式下访问外置 Flash;
读操作直接从映射基址取数,写操作通过 XIP 写操作码逐字下发。
源码组成 src/main.c:main、Delay;
src/xspi_flash.c:RCC_Configuration、Hardware_Configuration、XSPI_Standard_Mode_Config、XSPI_XIP_Mode_Config、Flash_XIP_Read_Buffer、Flash_XIP_Write_Buffer 等;
inc/main.h、inc/xspi_flash.h:宏与声明;
readme.txt、MDK-ARM/、EWARM/:说明与工程文件。
关键配置 映射基址:XIP_REMAP_BASE_ADDR 为 0x90000000;
XIP 读:读模式配置加 XSPI_SetXIPReadIncrOpcode;
XIP 写:写模式配置加 XSPI_SetXIPWriteIncrOpcode,并把 XSPI_SetNumberOfDataFrame 设为 1。
程序与数据路径 main 配好时钟与引脚后置 QE 并擦除扇区;
Flash_XIP_Read_Buffer 配置 XIP 读并读映射地址校验擦除结果;
Flash_XIP_Write_Buffer 逐字配置 XIP 写并写映射地址,再读回;
main 比较读回与写入并打印结论。
主要 API XSPI_InitXIP、XSPI_SetXIPModeBit、XSPI_SetXIPReadIncrOpcode、XSPI_SetXIPWriteIncrOpcode、XSPI_SetNumberOfDataFrame
验证方法 串口打印 XIP-Write data and XIP-Read data succeed 表示写入与读回一致;
擦除后读回若含非 0xFFFFFFFF 数据会打印 XIP 读错误。
使用提示 XIP 读通过 XIP_REMAP_BASE_ADDR 加偏移直接读取,无需逐字搬移;
XIP 写需逐字配置并把数据帧数量设为 1;
示例默认以 P25Q40 外置 Flash 与全功能板为准。
核心代码解读与移植

示例用 XIP 模式把外置 Flash 映射到固定基址,读操作直接按地址取数,写操作通过 XIP 写操作码逐字完成。

数据路径: XSPI_Standard_Mode_Config 进入标准模式 → Flash_Quad_Mode_Enable 置 QE 与 Flash_Sector_Erase 擦除 → XSPI_XIP_Mode_Config 配置 XIP 读并 XSPI_SetXIPReadIncrOpcode 设读操作码 → Flash_XIP_Read_Buffer 按映射地址读回 → Flash_XIP_Write_Buffer 配置 XIP 写并逐字写映射地址 → 读回比较

1. XIP 模式配置。 XSPI_XIP_Mode_Config 填充 XIP 初始化结构体,按读或写分别设置只收或只发模式与相关参数。

src/xspi_flash.csrc/xspi_flash.c · XSPI_XIP_Mode_Config
void XSPI_XIP_Mode_Config(uint32_t TransferMode, uint32_t FrameFormat, uint32_t TransferType, uint32_t Baudr, uint32_t WaitCycles, uint32_t XipModeBit)
{
    XSPI_XIPInitType XIPInitStruct;

    XSPI_Enable(XSPI, DISABLE);

    XSPI_InitXIPStruct(&XIPInitStruct);

    XIPInitStruct.SCPH            = XSPI_SCPH_FIRST_EDGE;
    XIPInitStruct.SCPOL           = XSPI_SCPOL_LOW_LEVEL;
    XIPInitStruct.DataFrameSize   = XSPI_FRAME_SIZE_32_BIT;
    XIPInitStruct.Baudr           = Baudr;
    XIPInitStruct.XipFrameFormat  = FrameFormat;
    XIPInitStruct.XipTransferType = TransferType;
    XIPInitStruct.XipAddrLen      = XSPI_ADDR_LEN_24BIT;
    XIPInitStruct.XipWaitCycles   = WaitCycles;
    XIPInitStruct.XipDDREable     = XSPI_DDR_DISABLE;
    
    if (TransferMode == XSPI_RX_ONLY_MODE)
    {
        XIPInitStruct.TransferMode = XSPI_RX_ONLY_MODE;
        
        XIPInitStruct.XIP_Info.Read_XIPInitType.XipInstructLen   = XSPI_INST_LEN_8BIT;
        XIPInitStruct.XIP_Info.Read_XIPInitType.XipInstrctEnable = XSPI_XIP_INSTRUCT_ENABLE;
        XIPInitStruct.XIP_Info.Read_XIPInitType.XipDFSHC         = XSPI_XIP_DFSHC_ENABLE;
        XIPInitStruct.XIP_Info.Read_XIPInitType.XipPrefetch      = XSPI_XIP_PREFETCH_ENABLE;
        XIPInitStruct.XIP_Info.Read_XIPInitType.XipModeBit       = XipModeBit;
        XIPInitStruct.XIP_Info.Read_XIPInitType.XipModeBitLen    = XSPI_XIP_MODE_BIT_LEN_8_BIT;
        
        XIPInitStruct.XIP_Info.Read_XIPInitType.ContinueTransfer.XipContinueTransfer = XSPI_XIP_CONTINUE_TRANSFER_ENABLE;
        XIPInitStruct.XIP_Info.Read_XIPInitType.ContinueTransfer.XipWatchDogTimeout  = 100U;
        
        XIPInitStruct.XIP_Info.Read_XIPInitType.Info.Rxds_InitType.RxdSamplingEdge = XSPI_RXD_HCLK_RISING_SAMPLING;
        XIPInitStruct.XIP_Info.Read_XIPInitType.Info.Rxds_InitType.RxdSampleDelay  = 3U;
    }
    else
    {
        XIPInitStruct.TransferMode = XSPI_TX_ONLY_MODE;
        
        XIPInitStruct.XIP_Info.Write_XIPInitType.XipInstructLen = XSPI_INST_LEN_8BIT;
    }
    XSPI_InitXIP(XSPI, &XIPInitStruct);

    XSPI_XIP_Slave_Select(XSPI, XSPI_SELECT_SLAVE_1);
}

2. XIP 读回。 Flash_XIP_Read_Buffer 使能 XSPI 后按 XIP_REMAP_BASE_ADDR 加偏移逐字读取映射地址。

src/xspi_flash.csrc/xspi_flash.c · Flash_XIP_Read_Buffer
    XSPI_SetRXFIFOFullThreshold(XSPI, XSPI_FIFO_THRESHOLD_LEVEL13);
    XSPI_Enable(XSPI, ENABLE);

    while (number < NumWordToRead)
    {
        pBuffer[number] = *((uint32_t *)(XIP_REMAP_BASE_ADDR + ReadAddr + number * 4));
        number++;
    }

3. XIP 写入。 Flash_XIP_Write_Buffer 逐个数据重新配置 XIP 写模式并把数据帧数量设为 1,再写入映射地址。

src/xspi_flash.csrc/xspi_flash.c · Flash_XIP_Write_Buffer
void Flash_XIP_Write_Buffer(uint32_t* pBuffer, uint32_t WriteAddr, uint32_t NumWordToWrite)
{
    uint32_t number = 0;

    while (number < NumWordToWrite)
    {
        Flash_Write_Enable();
    
        XSPI_XIP_Mode_Config(XSPI_TX_ONLY_MODE, XSPI_QUAD_LINE_MODE, XSPI_INST_ADDR_SINGLE_LINE, TEST_WR_CLKDIV, QUAD_INPUT_PAGE_PROGRAM_WAIT_CYCLES, 0);
        
        XSPI_SetXIPWriteIncrOpcode(XSPI, SPIFLASH_QuadPage_Pro);
        
        XSPI_SetNumberOfDataFrame(XSPI, 1);
        XSPI_Enable(XSPI, ENABLE);
        
        XSPI_Waie_Tx_Compelete();
        
        *((uint32_t *)(XIP_REMAP_BASE_ADDR + WriteAddr + number * 4)) = pBuffer[number];
        number++;
        
        Flash_Check_Busy();
    }
}

对应源码: src/xspi_flash.c

5.34.4 注意与排障

场景 检查与建议 来源
命令阶段 命令包含 Instruction、Address、Mode bits、Wait cycles、Data 五个阶段,任一阶段可跳过,但至少要保留其中一个。 用户手册
Mode bits Mode bits 阶段只在 XIP 模式使用;
使能后会在地址阶段后插入模式位,位宽为 2、4、8 或 16。
用户手册
DDR 波特率 DDR 模式下波特率值应为 4 的倍数。 用户手册
XIP 帧格式 XIP 操作只支持 Dual、Quad、Octal 模式,XSPI_CTRL0.SPIFRF 不能配置为 0。 用户手册
Tx and Rx 模式 Tx and Rx 模式只有在标准 SPI 模式(XSPI_CTRL0.SPIFRF 为 00)下才可使用。 用户手册
EEPROM read 模式 EEPROM read 模式只有在标准 SPI 模式(XSPI_CTRL0.SPIFRF 为 00)下才可使用,读取字节数在 XSPI_CTRL1.NDF 中指定。 用户手册
指令与地址 一条指令占用 1 个 FIFO 地址,地址可以占用多个 FIFO 位置,指令和地址都需写入 XSPI_DATx 寄存器。 用户手册
XIP 接收 FIFO 溢出 XIP 传输中若 RX FIFO 深度不足可能溢出导致数据错误,软件检测到 RX FIFO 溢出后必须重新尝试数据传输。 用户手册
国民技术开发套件文档中心

按芯片系列在线查阅国民技术 MCU 开发套件的芯片资料、SDK、驱动 API 与 Demo 示例说明。

© 2026 国民技术股份有限公司 版权所有粤ICP备11069485号本站使用不含 Cookie 的匿名访问统计