/****************************************************************************** * Shanghai ChipON Micro-Electronic Co.,Ltd * ****************************************************************************** * $File Name$ : KF32A156_spi.h * * $Author$ : ChipON AE/FAE Group * * $Data$ : 2021-07-08 * * $AutoSAR Version : V2.0 * * $Description$ : This file contains the headers of the SPI * * peripherals. * ****************************************************************************** * Copyright (C) by Shanghai ChipON Micro-Electronic Co.,Ltd * * All rights reserved. * * * * This software is copyright protected and proprietary to * * Shanghai ChipON Micro-Electronic Co.,Ltd. * ****************************************************************************** * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * REVISON HISTORY * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Data Version Author Description * * ~~~~~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * * * * * * *****************************************************************************/ #ifndef KF32A156_SPI_H_ #define KF32A156_SPI_H_ #include "KF32A156.h" /* SPI外设判断 ------------------------------------------------------------*/ #define CHECK_SPI_ALL_PERIPH(PERIPH) (((PERIPH) == SPI0_SFR) \ || ((PERIPH) == SPI1_SFR) \ || ((PERIPH) == SPI2_SFR) \ || ((PERIPH) == SPI3_SFR)) /** * 描述 串行外设接口(SPI)SPI协议信息结构体 */ typedef struct { uint32_t m_Mode; /* SPI模式选择, 取值为宏“SPI模式”中的一个。 */ uint32_t m_Clock; /* SPI工作时钟选择寄存器, 取值为宏“SPI工作时钟”中的一个。 */ uint32_t m_FirstBit; /* SPI数据方向选择位. 取值为宏“SPI数据方向”中的一个。 */ uint32_t m_CKP; /* 时钟极性选择位. 取值为宏“SPI时钟极性”中的一个。 */ uint32_t m_CKE; /* SPI时钟边沿选择位. 取值为宏“SPI时钟边沿”中的一个。 */ uint32_t m_DataSize; /* SPI位模式选择, 取值为宏“SPI位模式”中的一个。 */ uint16_t m_BaudRate; /* SPI波特率选择, 取值为0~0xFFFF。 */ }SPI_InitTypeDef; /** * 描述 串行外设接口(SPI)I2S协议信息结构体 */ typedef struct { uint32_t m_Mode; /* I2S模式选择, 取值为宏“I2S模式”中的一个。 */ uint32_t m_Standard; /* I2S标准选择, 取值为宏“I2S标准”中的一个。 */ uint32_t m_PCM; /* PCM帧同步, 取值为宏“PCM帧同步”中的一个。 */ uint32_t m_Clock; /* I2S模式的时钟分频选择, 取值为宏“I2S模式的时钟分频”中的一个。 */ uint8_t m_Prescaler; /* I2S预分频, 取值为0~0xFF。 */ }I2S_InitTypeDef; /** * SPI模式 */ #define SPI_MODE_MASTER_CLKDIV4 ((uint32_t)0<> 16) == 0) /** * I2S预分频 */ #define CHECK_I2S_DIV(DIV) (((uint32_t)(DIV) >> 8) == 0) /* 串行外设接口(SPI)初始化函数定义******************************************/ void SPI_Reset(SPI_SFRmap* SPIx); void SPI_Configuration(SPI_SFRmap* SPIx, SPI_InitTypeDef* spiInitStruct); void I2S_Configuration(SPI_SFRmap* SPIx, I2S_InitTypeDef* i2sInitStruct); void SPI_Struct_Init(SPI_InitTypeDef* SPI_InitStruct); void I2S_Struct_Init(I2S_InitTypeDef* I2S_InitStruct); /* 串行外设接口(SPI)配置函数定义********************************************/ void SPI_Cmd (SPI_SFRmap* SPIx, FunctionalState NewState); void I2S_Mode_Select(SPI_SFRmap* SPIx, FunctionalState NewState); uint32_t SPI_I2S_ReceiveData(SPI_SFRmap* SPIx); void SPI_I2S_SendData32(SPI_SFRmap* SPIx, uint32_t Data); void SPI_I2S_SendData8(SPI_SFRmap* SPIx, uint8_t Data); void SPI_BaudRate_Config (SPI_SFRmap* SPIx, uint16_t BAUDRATE); void I2S_DIV_Config (SPI_SFRmap* SPIx, uint8_t DIV); void SPI_MODE_Config (SPI_SFRmap* SPIx, uint32_t MODE); void SPI_CLK_Config (SPI_SFRmap* SPIx, uint32_t ClockSource); void SPI_Data_Direction_Config(SPI_SFRmap* SPIx, uint32_t DataDirection); void SPI_Slave_PIN_Config (SPI_SFRmap* SPIx,uint32_t Select); void SPI_Port_Connection_Mode (SPI_SFRmap* SPIx,uint32_t Mode); void SPI_Clock_Polarity_Config (SPI_SFRmap* SPIx, uint32_t Polarity); void SPI_Clock_Edge_Config (SPI_SFRmap* SPIx, uint32_t ClockEdge); void SPI_BIT_SELECT_Config(SPI_SFRmap* SPIx, uint32_t DataSize); void SPI_I2S_MODE_Config (SPI_SFRmap* SPIx, uint32_t Mode); void SPI_I2S_STANDARD_Config(SPI_SFRmap* SPIx, uint32_t Standard); void SPI_PCM_Config (SPI_SFRmap* SPIx, uint32_t NewState); void SPI_CHLEN_Config (SPI_SFRmap* SPIx, uint32_t NewState); void SPI_MAIN_CLOCK_OUT_Enable (SPI_SFRmap* SPIx, FunctionalState NewState); void SPI_I2S_Idle_MCK_Outpue_Select(SPI_SFRmap* SPIx,FunctionalState NewState); /* 串行外设接口(SPI)中断管理函数定义****************************************/ void SPI_Receive_Overflow_INT_Enable (SPI_SFRmap* SPIx, FunctionalState NewState); void SPI_Transmit_Overflow_INT_Enable (SPI_SFRmap* SPIx, FunctionalState NewState); void SPI_RNEIE_INT_Enable (SPI_SFRmap* SPIx, FunctionalState NewState); void SPI_TNEIE_INT_Enable (SPI_SFRmap* SPIx, FunctionalState NewState); void SPI_Receive_DMA_INT_Enable (SPI_SFRmap* SPIx, FunctionalState NewState); void SPI_Transmit_DMA_INT_Enable (SPI_SFRmap* SPIx, FunctionalState NewState); void SPI_Transmit_CHSIDE_INT_Enable (SPI_SFRmap* SPIx, FunctionalState NewState); FlagStatus SPI_Get_BUSY_Flag (SPI_SFRmap* SPIx); FlagStatus SPI_Get_Receive_Overflow_Flag (SPI_SFRmap* SPIx); FlagStatus SPI_Get_Transmit_Overflow_Flag (SPI_SFRmap* SPIx); FlagStatus SPI_Get_Receive_Buf_Flag (SPI_SFRmap* SPIx); FlagStatus SPI_Get_Transmit_Buf_Flag (SPI_SFRmap* SPIx); RetStatus SPI_Clear_Receive_Overflow_INT_Flag (SPI_SFRmap* SPIx); RetStatus SPI_Clear_Transmit_Overflow_INT_Flag (SPI_SFRmap* SPIx); #endif /* KF32A156_SPI_H_ */