/**
|
******************************************************************************
|
* @file fm33a0xxev_spi.h
|
* @author FM33A0XXEV Application Team
|
* @version V1.0.0
|
* @date 16-April-2020
|
* @brief This file contains all the functions prototypes for the SPI firmware library.
|
******************************************************************************
|
*/
|
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
#ifndef __FM33A0XXEV_SPI_H
|
#define __FM33A0XXEV_SPI_H
|
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "FM33A0XXEV.h"
|
|
//------------------------------------------------------------------------------
|
|
#define SPIx_CR1_IOSWAP_Pos 11 /* MOSIºÍMISOÒý½Å½»»» (IO swapping)
|
0£ºÄ¬ÈÏÒý½Å˳Ðò
|
1£º½»»»Òý½Å˳Ðò */
|
#define SPIx_CR1_IOSWAP_Msk (0x1U << SPIx_CR1_IOSWAP_Pos)
|
#define SPIx_CR1_IOSWAP_DEFAULT (0x0U << SPIx_CR1_IOSWAP_Pos) /* ĬÈÏÒý½Å˳Ðò */
|
#define SPIx_CR1_IOSWAP_EXCHANGE (0x1U << SPIx_CR1_IOSWAP_Pos) /* ½»»»Òý½Å˳Ðò */
|
|
#define SPIx_CR1_MSPA_Pos 10 /* Master Sampling Position Adjustment£¬Master¶ÔMISOÐźŵIJÉÑùλÖõ÷Õû£¬ÓÃÓÚ¸ßËÙͨÐÅʱ²¹³¥PCB×ßÏßÑÓ³Ù
|
1£º²ÉÑùµãÑÓ³Ù°ë¸öSCKÖÜÆÚ
|
0£º²»µ÷Õû */
|
#define SPIx_CR1_MSPA_Msk (0x1U << SPIx_CR1_MSPA_Pos)
|
#define SPIx_CR1_MSPA_DELAY (0x1U << SPIx_CR1_MSPA_Pos) /* ²ÉÑùµãÑÓ³Ù°ë¸öSCKÖÜÆÚ */
|
#define SPIx_CR1_MSPA_NORMAL (0x0U << SPIx_CR1_MSPA_Pos) /* ²»µ÷Õû */
|
|
#define SPIx_CR1_SSPA_Pos 9 /* Slave Sending Position Adjustment£¬Slave MISO·¢ËÍλÖõ÷Õû
|
1£ºÌáǰ°ë¸öSCKÖÜÆÚ·¢ËÍ
|
0£º²»µ÷Õû */
|
#define SPIx_CR1_SSPA_Msk (0x1U << SPIx_CR1_SSPA_Pos)
|
#define SPIx_CR1_SSPA_EARLY (0x1U << SPIx_CR1_SSPA_Pos) /* Ìáǰ°ë¸öSCKÖÜÆÚ·¢ËÍ */
|
#define SPIx_CR1_SSPA_NORMAL (0x0U << SPIx_CR1_SSPA_Pos) /* ²»µ÷Õû */
|
|
#define SPIx_CR1_MM_Pos 8 /* Master/SlaveģʽѡÔñ¡£(Master Mode)1£ºMasterģʽ0£ºSlaveģʽ */
|
#define SPIx_CR1_MM_Msk (0x1U << SPIx_CR1_MM_Pos)
|
#define SPIx_CR1_MM_MASTER (0x1U << SPIx_CR1_MM_Pos)
|
#define SPIx_CR1_MM_SLAVE (0x0U << SPIx_CR1_MM_Pos)
|
|
#define SPIx_CR1_WAIT_Pos 6 /* MasterģʽÏ£¬Ã¿·¢ËÍÍêÒ»Ö¡ºó¼ÓÈëÖÁÉÙ(1+WAIT)¸öSCK cycleµÈ´ýʱ¼ä£¬ÔÙ´«ÊäÏÂÒ»Ö¡µÄÊý¾Ý¡£Èç¹ûSSNÓÉÓ²¼þ¿ØÖÆ£¬²¢ÇÒSSNM=1£¬ÔòÓ²¼þ»á×Ô¶¯À¸ßSSN¡£ */
|
#define SPIx_CR1_WAIT_Msk (0x3U << SPIx_CR1_WAIT_Pos)
|
#define SPIx_CR1_WAIT_1WAIT (0x0U << SPIx_CR1_WAIT_Pos)
|
#define SPIx_CR1_WAIT_2WAIT (0x1U << SPIx_CR1_WAIT_Pos)
|
#define SPIx_CR1_WAIT_3WAIT (0x2U << SPIx_CR1_WAIT_Pos)
|
#define SPIx_CR1_WAIT_4WAIT (0x3U << SPIx_CR1_WAIT_Pos)
|
|
#define SPIx_CR1_BAUD_Pos 3 /* Masterģʽ²¨ÌØÂÊÅäÖÃλ: (Baud rate)000£º fAPBCLK/2001£º fAPBCLK/4010£º fAPBCLK/8011£º fAPBCLK/16100£º fAPBCLK/32101£º fAPBCLK/64110£º fAPBCLK/128111£º fAPBCLK/256µ±Í¨ÐÅÕýÔÚ½øÐеÄʱºò£¬²»ÄÜÐÞ¸ÄÕâЩλ¡£ */
|
#define SPIx_CR1_BAUD_Msk (0x7U << SPIx_CR1_BAUD_Pos)
|
#define SPIx_CR1_BAUD_DIV2 (0x0U << SPIx_CR1_BAUD_Pos)
|
#define SPIx_CR1_BAUD_DIV4 (0x1U << SPIx_CR1_BAUD_Pos)
|
#define SPIx_CR1_BAUD_DIV8 (0x2U << SPIx_CR1_BAUD_Pos)
|
#define SPIx_CR1_BAUD_DIV16 (0x3U << SPIx_CR1_BAUD_Pos)
|
#define SPIx_CR1_BAUD_DIV32 (0x4U << SPIx_CR1_BAUD_Pos)
|
#define SPIx_CR1_BAUD_DIV64 (0x5U << SPIx_CR1_BAUD_Pos)
|
#define SPIx_CR1_BAUD_DIV128 (0x6U << SPIx_CR1_BAUD_Pos)
|
#define SPIx_CR1_BAUD_DIV256 (0x7U << SPIx_CR1_BAUD_Pos)
|
|
#define SPIx_CR1_LSBF_Pos 2 /* Ö¡¸ñʽ (LSB First) 0£ºÏÈ·¢ËÍMSB1£ºÏÈ·¢ËÍLSB×¢£ºµ±Í¨ÐÅÔÚ½øÐÐʱ²»Äܸıä¸ÃλµÄÖµ¡£ */
|
#define SPIx_CR1_LSBF_Msk (0x1U << SPIx_CR1_LSBF_Pos)
|
#define SPIx_CR1_LSBF_MSB (0x0U << SPIx_CR1_LSBF_Pos)
|
#define SPIx_CR1_LSBF_LSB (0x1U << SPIx_CR1_LSBF_Pos)
|
|
#define SPIx_CR1_CPHOL_Pos 1
|
#define SPIx_CR1_CPHOL_Msk (0x1U << SPIx_CR1_CPHOL_Pos)
|
#define SPIx_CR1_CPHOL_LOW (0x0U << SPIx_CR1_CPHOL_Pos)
|
#define SPIx_CR1_CPHOL_HIGH (0x1U << SPIx_CR1_CPHOL_Pos)
|
|
#define SPIx_CR1_CPHA_Pos 0 /* ʱÖÓÏàλѡÔñ (Clock Phase)1£ºµÚ¶þ¸öʱÖÓ±ßÑØÊǵÚÒ»¸ö²¶×½±ßÑØ0£ºµÚÒ»¸öʱÖÓ±ßÑØÊǵÚÒ»¸ö²¶×½±ßÑØ×¢£ºµ±Í¨ÐÅÔÚ½øÐÐʱ²»Äܸıä¸ÃλµÄÖµ¡£ */
|
#define SPIx_CR1_CPHA_Msk (0x1U << SPIx_CR1_CPHA_Pos)
|
#define SPIx_CR1_CPHA_1CLOCK (0x0U << SPIx_CR1_CPHA_Pos)
|
#define SPIx_CR1_CPHA_2CLOCK (0x1U << SPIx_CR1_CPHA_Pos)
|
|
#define SPIx_CR2_DUMMY_EN_Pos 15 /* 4Ïß°ëË«¹¤ÐÒéÏÂÊÇ·ñÔÚ¶Á²Ù×÷ÖвåÈëdummy cycle
|
(Dummy cycle Enable)
|
0£º²»²åÈëdummy cycle
|
1£ºÔÚ¶ÁÃüÁîÖ®ºó²åÈëÒ»¸ödummy cycle */
|
#define SPIx_CR2_DUMMY_EN_Msk (0x1U << SPIx_CR2_DUMMY_EN_Pos)
|
/* ²»²åÈëdummy cycle */
|
/* ÔÚ¶ÁÃüÁîÖ®ºó²åÈëÒ»¸ödummy cycle */
|
|
#define SPIx_CR2_RXO_Pos 11 /* RXONLY¿ØÖÆÎ»£¬´Ë¼Ä´æÆ÷ÖÃλʱ£¬SPI¿ÉÒÔÁ¬Ðø½ÓÊÕ£¬ÎÞÐèÈí¼þдTXBUF (Receive Only mode)
|
1£ºÆô¶¯MasterµÄµ¥½ÓÊÕģʽ
|
0£º¹Ø±Õµ¥½ÓÊÕģʽ£¨ÊÕ·¢È«Ë«¹¤£© */
|
#define SPIx_CR2_RXO_Msk (0x1U << SPIx_CR2_RXO_Pos)
|
/* Æô¶¯MasterµÄµ¥½ÓÊÕģʽ */
|
/* ¹Ø±Õµ¥½ÓÊÕģʽ£¨ÊÕ·¢È«Ë«¹¤£© */
|
|
#define SPIx_CR2_DLEN_Pos 9 /* ͨÐÅÊý¾Ý×Ö³¤ÅäÖà (Data Length)
|
00£º8bit
|
01£º16bit
|
10£º24bit
|
11£º32bit */
|
#define SPIx_CR2_DLEN_Msk (0x3U << SPIx_CR2_DLEN_Pos)
|
#define SPIx_CR2_DLEN_8BIT (0x0U << SPIx_CR2_DLEN_Pos) /* 8bit */
|
#define SPIx_CR2_DLEN_16BIT (0x1U << SPIx_CR2_DLEN_Pos) /* 16bit */
|
#define SPIx_CR2_DLEN_24BIT (0x2U << SPIx_CR2_DLEN_Pos) /* 24bit */
|
#define SPIx_CR2_DLEN_32BIT (0x3U << SPIx_CR2_DLEN_Pos) /* 32bit */
|
|
#define SPIx_CR2_HALFDUPLEX_Pos 8 /* ͨÐÅģʽѡÔñ (Half-Duplex mode)
|
0£º±ê×¼SPIģʽ£¬4Ïßȫ˫¹¤
|
1£ºDCNģʽ£¬4Ïß°ëË«¹¤ */
|
#define SPIx_CR2_HALFDUPLEX_Msk (0x1U << SPIx_CR2_HALFDUPLEX_Pos)
|
#define SPIx_CR2_HALFDUPLEX_SPI (0x0U << SPIx_CR2_HALFDUPLEX_Pos) /* ±ê×¼SPIģʽ£¬4Ïßȫ˫¹¤ */
|
#define SPIx_CR2_HALFDUPLEX_DCN (0x1U << SPIx_CR2_HALFDUPLEX_Pos) /* DCNģʽ£¬4Ïß°ëË«¹¤ */
|
|
#define SPIx_CR2_HD_RW_Pos 7 /* °ëË«¹¤Ä£Ê½ÏÂÖ÷»ú¶Áд²Ù×÷ÅäÖà (Read/Write config for Half-Duplex mode)
|
0£º4Ïß°ëË«¹¤ÐÒéÏÂÖ÷»úдÈë´Ó»ú
|
1£º4Ïß°ëË«¹¤ÐÒéÏÂÖ÷»ú¶ÁÈ¡´Ó»ú */
|
#define SPIx_CR2_HD_RW_Msk (0x1U << SPIx_CR2_HD_RW_Pos)
|
#define SPIx_CR2_HD_RW_WRITE (0x0U << SPIx_CR2_HD_RW_Pos) /* 4Ïß°ëË«¹¤ÐÒéÏÂÖ÷»úдÈë´Ó»ú */
|
#define SPIx_CR2_HD_RW_READ (0x1U << SPIx_CR2_HD_RW_Pos) /* 4Ïß°ëË«¹¤ÐÒéÏÂÖ÷»ú¶ÁÈ¡´Ó»ú */
|
|
#define SPIx_CR2_CMD8b_Pos 6 /* °ëË«¹¤Ä£Ê½Ï¶¨ÒåcommandÖ¡³¤¶È (Command 8 bits)
|
1£ºcommandÖ¡¹Ì¶¨Îª8bit
|
0£ºcommandÖ¡³¤¶ÈÓÉDLEN¶¨Òå */
|
#define SPIx_CR2_CMD8b_Msk (0x1U << SPIx_CR2_CMD8b_Pos)
|
#define SPIx_CR2_CMD8b_8BIT (0x1U << SPIx_CR2_CMD8b_Pos) /* commandÖ¡¹Ì¶¨Îª8bit */
|
#define SPIx_CR2_CMD8b_DLEN (0x0U << SPIx_CR2_CMD8b_Pos) /* commandÖ¡³¤¶ÈÓÉDLEN¶¨Òå */
|
|
#define SPIx_CR2_SSNM_Pos 5 /* MasterģʽÏÂSSN¿ØÖÆÄ£Ê½Ñ¡Ôñ (SSN mode)
|
1£ºÃ¿·¢ËÍÍêÒ»Ö¡ºóMasterÀ¸ßSSN£¬Î¬³Ö¸ßµçƽʱ¼äÓÉWAIT¼Ä´æÆ÷¿ØÖÆ
|
0£ºÃ¿·¢ËÍÍêÒ»Ö¡ºóMaster±£³ÖSSNΪµÍ */
|
#define SPIx_CR2_SSNM_Msk (0x1U << SPIx_CR2_SSNM_Pos)
|
#define SPIx_CR2_SSNM_HIGH (0x1U << SPIx_CR2_SSNM_Pos) /* ÿ·¢ËÍÍêÒ»Ö¡ºóMasterÀ¸ßSSN£¬Î¬³Ö¸ßµçƽʱ¼äÓÉWAIT¼Ä´æÆ÷¿ØÖÆ */
|
#define SPIx_CR2_SSNM_LOW (0x0U << SPIx_CR2_SSNM_Pos) /* ÿ·¢ËÍÍêÒ»Ö¡ºóMaster±£³ÖSSNΪµÍ */
|
|
#define SPIx_CR2_TXO_AC_Pos 4 /* TXONLYÓ²¼þ×Ô¶¯Çå¿ÕµÄʹÄÜ (TXONLY auto-clear enable)1£ºTXONLYÓ²¼þ×Ô¶¯ÇåÁãÓÐЧ£¬Èí¼þʹÄÜTXOºó£¬µÈ´ý·¢ËÍÍê±Ïºó£¬Ó²¼þÇåÁã0£º¹Ø±ÕTXONLYÓ²¼þ×Ô¶¯ÇåÁã */
|
#define SPIx_CR2_TXO_AC_Msk (0x1U << SPIx_CR2_TXO_AC_Pos)
|
|
#define SPIx_CR2_TXO_Pos 3 /* TXONLY¿ØÖÆÎ» (Transmit Only mode enable)
|
1£ºÆô¶¯MasterµÄµ¥·¢ËÍģʽ
|
0£º¹Ø±Õµ¥·¢ËÍģʽ£¨ÊÕ·¢È«Ë«¹¤£© */
|
#define SPIx_CR2_TXO_Msk (0x1U << SPIx_CR2_TXO_Pos)
|
/* Æô¶¯MasterµÄµ¥·¢ËÍģʽ */
|
/* ¹Ø±Õµ¥·¢ËÍģʽ£¨ÊÕ·¢È«Ë«¹¤£© */
|
|
#define SPIx_CR2_SSN_Pos 2 /* MasterģʽÏ£¬Èç¹ûSSNSENΪ1£¬Èí¼þ¿ÉÒÔͨ¹ý´Ëλ¿ØÖÆSSNÊä³öµçƽ 1£ºSSNÊä³ö¸ßµçƽ
|
0£ºSSNÊä³öµÍµçƽ */
|
#define SPIx_CR2_SSN_Msk (0x1U << SPIx_CR2_SSN_Pos)
|
#define SPIx_CR2_SSN_LOW (0x0U << SPIx_CR2_SSN_Pos) /* SSNÊä³ö¸ßµçƽ */
|
#define SPIx_CR2_SSN_HIGH (0x1U << SPIx_CR2_SSN_Pos) /* SSNÊä³öµÍµçƽ */
|
|
#define SPIx_CR2_SSNSEN_Pos 1 /* MasterģʽÏ£¬Èí¼þ¿ØÖÆSSNʹÄÜ (SSN Software Enable)
|
1£ºMasterģʽÏÂSSNÊä³öÓÉÈí¼þ¿ØÖÆ
|
0£ºMasterģʽÏÂSSNÊä³öÓÉÓ²¼þ×Ô¶¯¿ØÖÆ */
|
#define SPIx_CR2_SSNSEN_Msk (0x1U << SPIx_CR2_SSNSEN_Pos)
|
/* MasterģʽÏÂSSNÊä³öÓÉÈí¼þ¿ØÖÆ */
|
/* MasterģʽÏÂSSNÊä³öÓÉÓ²¼þ×Ô¶¯¿ØÖÆ */
|
|
#define SPIx_CR2_SPIEN_Pos 0 /* SPIʹÄÜ (SPI enable)1£ºÊ¹ÄÜSPI0£º¹Ø±ÕSPI£¬Çå¿Õ·¢ËͽÓÊÕ»º´æ */
|
#define SPIx_CR2_SPIEN_Msk (0x1U << SPIx_CR2_SPIEN_Pos)
|
|
#define SPIx_CR3_TXBFC_Pos 3 /* Transmit Buffer Clear£¬Èí¼þд1Çå³ý·¢ËÍ»º´æ£¬Ð´0ÎÞЧ */
|
#define SPIx_CR3_TXBFC_Msk (0x1U << SPIx_CR3_TXBFC_Pos)
|
|
#define SPIx_CR3_RXBFC_Pos 2 /* Receive Buffer Clear£¬Èí¼þд1Çå³ý·¢ËÍ»º´æ£¬Ð´0ÎÞЧ */
|
#define SPIx_CR3_RXBFC_Msk (0x1U << SPIx_CR3_RXBFC_Pos)
|
|
#define SPIx_CR3_MERRC_Pos 1 /* Master Error Clear£¬Èí¼þд1Çå³ýHSPISTA.MERR¼Ä´æÆ÷ */
|
#define SPIx_CR3_MERRC_Msk (0x1U << SPIx_CR3_MERRC_Pos)
|
|
#define SPIx_CR3_SERRC_Pos 0 /* Slave Error Clear£¬Èí¼þд1Çå³ýHSPISTA.SERR¼Ä´æÆ÷ */
|
#define SPIx_CR3_SERRC_Msk (0x1U << SPIx_CR3_SERRC_Pos)
|
|
#define SPIx_IER_ERRIE_Pos 2 /* SPI´íÎóÖжÏʹÄÜ (Error Interrupt Enable) */
|
#define SPIx_IER_ERRIE_Msk (0x1U << SPIx_IER_ERRIE_Pos)
|
|
#define SPIx_IER_TXIE_Pos 1 /* ·¢ËÍÍê³ÉÖжÏʹÄÜ (Transmit Interrupt Enable) */
|
#define SPIx_IER_TXIE_Msk (0x1U << SPIx_IER_TXIE_Pos)
|
|
#define SPIx_IER_RXIE_Pos 0 /* ½ÓÊÕÍê³ÉÖжÏʹÄÜ (Receive Interrupt Enable) */
|
#define SPIx_IER_RXIE_Msk (0x1U << SPIx_IER_RXIE_Pos)
|
|
#define SPIx_ISR_DCN_TX_Pos 12 /* °ëË«¹¤Ä£Ê½Ï£¨HALFDUPLEX=1£©£¬ÅäÖÃÔÚÿ¸öÊý¾ÝÖ¡µÄ×îºóbit·¢Ë͵ÄDCNÐÅºÅµçÆ½ (Data/Command transmit config)
|
0£ºDCN=0£¬±íʾÃüÁîÖ¡
|
1£ºDCN=1£¬±íʾÊý¾ÝÖ¡
|
Èí¼þÓ¦ÔÚ·¢ËÍǰÉèÖÃDCN_TX¼Ä´æÆ÷£¬Èç¹ûDCN_TX=0£¬Ó²¼þÔÚÍê³ÉÒ»Ö¡·¢Ëͺó£¬×Ô¶¯½«DCN_TXÖÃ1£¬¼´Ä¬ÈÏÖ»»á·¢ËÍÒ»¸öÃüÁîÖ¡£¬ºóÐø¶¼ÊÇÊý¾ÝÖ¡¡£ */
|
#define SPIx_ISR_DCN_TX_Msk (0x1U << SPIx_ISR_DCN_TX_Pos)
|
#define SPIx_ISR_DCN_TX_COMMAND (0x0U << SPIx_ISR_DCN_TX_Pos) /* DCN=0£¬±íʾÃüÁîÖ¡ */
|
#define SPIx_ISR_DCN_TX_DATA (0x1U << SPIx_ISR_DCN_TX_Pos) /* DCN=1£¬±íʾÊý¾ÝÖ¡ */
|
|
#define SPIx_ISR_RXCOL_Pos 10 /* ½ÓÊÕ»º´æÒç³ö£¬Èí¼þд1ÇåÁã (Receive Collision flag,write 1 to flag) */
|
#define SPIx_ISR_RXCOL_Msk (0x1U << SPIx_ISR_RXCOL_Pos)
|
|
#define SPIx_ISR_TXCOL_Pos 9 /* ·¢ËÍ»º´æÒç³ö£¬Èí¼þд1ÇåÁã (Transmit Collision flag,write 1 to clear) */
|
#define SPIx_ISR_TXCOL_Msk (0x1U << SPIx_ISR_TXCOL_Pos)
|
|
#define SPIx_ISR_BUSY_Pos 8 /* SPI¿ÕÏбêÖ¾£¬Ö»¶Á (busy flag)
|
1£ºSPI´«Êä½øÐÐÖÐ
|
0£ºSPI´«Êä¿ÕÏÐ */
|
#define SPIx_ISR_BUSY_Msk (0x1U << SPIx_ISR_BUSY_Pos)
|
|
#define SPIx_ISR_MERR_Pos 6 /* Master Error±êÖ¾(Master Error flag)
|
µ±MasterÏ´«ÊäδÂú8λSSN¾Í±»À¸ßʱ£¬MERRÖÃλ */
|
#define SPIx_ISR_MERR_Msk (0x1U << SPIx_ISR_MERR_Pos)
|
|
#define SPIx_ISR_SERR_Pos 5 /* Slave Error±êÖ¾(Slave Error flag)
|
µ±SlaveÏ´«ÊäδÂú8λSSN¾Í±»À¸ßʱ£¬SERRÖÃλ */
|
#define SPIx_ISR_SERR_Msk (0x1U << SPIx_ISR_SERR_Pos)
|
|
#define SPIx_ISR_TXBE_Pos 1 /* TX Buffer Empty±ê־λ(TX Buffer Empty flag)
|
1£º·¢ËÍ»º´æ¿Õ£¬Èí¼þдTXBUFÇåÁã
|
0£º·¢ËÍ»º´æÂú */
|
#define SPIx_ISR_TXBE_Msk (0x1U << SPIx_ISR_TXBE_Pos)
|
|
#define SPIx_ISR_RXBF_Pos 0 /* RX Buffer Full±ê־λ(RX Buffer Full flag)
|
1£º½ÓÊÕ»º´æÂú£¬Èí¼þ¶ÁRXBUFÇåÁã
|
0£º½ÓÊÕ»º´æ¿Õ */
|
#define SPIx_ISR_RXBF_Msk (0x1U << SPIx_ISR_RXBF_Pos)
|
|
#define SPIx_TXBUF_TXBUF_Pos 0 /* SPI·¢ËÍ»º´æ (Transmit Buffer) */
|
#define SPIx_TXBUF_TXBUF_Msk (0xffffffffU << SPIx_TXBUF_TXBUF_Pos)
|
|
#define SPIx_RXBUF_RXBUF_Pos 0 /* SPI½ÓÊÕ»º´æ (Receive Buffer) */
|
#define SPIx_RXBUF_RXBUF_Msk (0xffffffffU << SPIx_RXBUF_RXBUF_Pos)
|
//Macro_End
|
|
/* Exported functions --------------------------------------------------------*/
|
extern void SPIx_Deinit(SPI_Type* SPIx);
|
|
/* MOSIºÍMISOÒý½Å½»»» (IO swapping)
|
0£ºÄ¬ÈÏÒý½Å˳Ðò
|
1£º½»»»Òý½Å˳Ðò Ïà¹Øº¯Êý */
|
extern void SPIx_CR1_IOSWAP_Set(SPI_Type* SPIx, uint32_t SetValue);
|
extern uint32_t SPIx_CR1_IOSWAP_Get(SPI_Type* SPIx);
|
|
/* Master Sampling Position Adjustment£¬Master¶ÔMISOÐźŵIJÉÑùλÖõ÷Õû£¬ÓÃÓÚ¸ßËÙͨÐÅʱ²¹³¥PCB×ßÏßÑÓ³Ù
|
1£º²ÉÑùµãÑÓ³Ù°ë¸öSCKÖÜÆÚ
|
0£º²»µ÷Õû Ïà¹Øº¯Êý */
|
extern void SPIx_CR1_MSPA_Set(SPI_Type* SPIx, uint32_t SetValue);
|
extern uint32_t SPIx_CR1_MSPA_Get(SPI_Type* SPIx);
|
|
/* Slave Sending Position Adjustment£¬Slave MISO·¢ËÍλÖõ÷Õû
|
1£ºÌáǰ°ë¸öSCKÖÜÆÚ·¢ËÍ
|
0£º²»µ÷Õû Ïà¹Øº¯Êý */
|
extern void SPIx_CR1_SSPA_Set(SPI_Type* SPIx, uint32_t SetValue);
|
extern uint32_t SPIx_CR1_SSPA_Get(SPI_Type* SPIx);
|
|
/* Master/SlaveģʽѡÔñ¡£(Master Mode)1£ºMasterģʽ0£ºSlaveģʽ Ïà¹Øº¯Êý */
|
extern void SPIx_CR1_MM_Set(SPI_Type* SPIx, uint32_t SetValue);
|
extern uint32_t SPIx_CR1_MM_Get(SPI_Type* SPIx);
|
|
/* MasterģʽÏ£¬Ã¿·¢ËÍÍêÒ»Ö¡ºó¼ÓÈëÖÁÉÙ(1+WAIT)¸öSCK cycleµÈ´ýʱ¼ä£¬ÔÙ´«ÊäÏÂÒ»Ö¡µÄÊý¾Ý¡£Èç¹ûSSNÓÉÓ²¼þ¿ØÖÆ£¬²¢ÇÒSSNM=1£¬ÔòÓ²¼þ»á×Ô¶¯À¸ßSSN¡£ Ïà¹Øº¯Êý */
|
extern void SPIx_CR1_WAIT_Set(SPI_Type* SPIx, uint32_t SetValue);
|
extern uint32_t SPIx_CR1_WAIT_Get(SPI_Type* SPIx);
|
|
/* Masterģʽ²¨ÌØÂÊÅäÖÃλ: (Baud rate)000£º fAPBCLK/2001£º fAPBCLK/4010£º fAPBCLK/8011£º fAPBCLK/16100£º fAPBCLK/32101£º fAPBCLK/64110£º fAPBCLK/128111£º fAPBCLK/256µ±Í¨ÐÅÕýÔÚ½øÐеÄʱºò£¬²»ÄÜÐÞ¸ÄÕâЩλ¡£ Ïà¹Øº¯Êý */
|
extern void SPIx_CR1_BAUD_Set(SPI_Type* SPIx, uint32_t SetValue);
|
extern uint32_t SPIx_CR1_BAUD_Get(SPI_Type* SPIx);
|
|
/* Ö¡¸ñʽ (LSB First) 0£ºÏÈ·¢ËÍMSB1£ºÏÈ·¢ËÍLSB×¢£ºµ±Í¨ÐÅÔÚ½øÐÐʱ²»Äܸıä¸ÃλµÄÖµ¡£ Ïà¹Øº¯Êý */
|
extern void SPIx_CR1_LSBF_Set(SPI_Type* SPIx, uint32_t SetValue);
|
extern uint32_t SPIx_CR1_LSBF_Get(SPI_Type* SPIx);
|
extern void SPIx_CR1_CPHOL_Set(SPI_Type* SPIx, uint32_t SetValue);
|
extern uint32_t SPIx_CR1_CPHOL_Get(SPI_Type* SPIx);
|
|
/* ʱÖÓÏàλѡÔñ (Clock Phase)1£ºµÚ¶þ¸öʱÖÓ±ßÑØÊǵÚÒ»¸ö²¶×½±ßÑØ0£ºµÚÒ»¸öʱÖÓ±ßÑØÊǵÚÒ»¸ö²¶×½±ßÑØ×¢£ºµ±Í¨ÐÅÔÚ½øÐÐʱ²»Äܸıä¸ÃλµÄÖµ¡£ Ïà¹Øº¯Êý */
|
extern void SPIx_CR1_CPHA_Set(SPI_Type* SPIx, uint32_t SetValue);
|
extern uint32_t SPIx_CR1_CPHA_Get(SPI_Type* SPIx);
|
|
/* 4Ïß°ëË«¹¤ÐÒéÏÂÊÇ·ñÔÚ¶Á²Ù×÷ÖвåÈëdummy cycle
|
(Dummy cycle Enable)
|
0£º²»²åÈëdummy cycle
|
1£ºÔÚ¶ÁÃüÁîÖ®ºó²åÈëÒ»¸ödummy cycle Ïà¹Øº¯Êý */
|
extern void SPIx_CR2_DUMMY_EN_Setable(SPI_Type* SPIx, FunState NewState);
|
extern FunState SPIx_CR2_DUMMY_EN_Getable(SPI_Type* SPIx);
|
|
/* RXONLY¿ØÖÆÎ»£¬´Ë¼Ä´æÆ÷ÖÃλʱ£¬SPI¿ÉÒÔÁ¬Ðø½ÓÊÕ£¬ÎÞÐèÈí¼þдTXBUF (Receive Only mode)
|
1£ºÆô¶¯MasterµÄµ¥½ÓÊÕģʽ
|
0£º¹Ø±Õµ¥½ÓÊÕģʽ£¨ÊÕ·¢È«Ë«¹¤£© Ïà¹Øº¯Êý */
|
extern void SPIx_CR2_RXO_Setable(SPI_Type* SPIx, FunState NewState);
|
extern FunState SPIx_CR2_RXO_Getable(SPI_Type* SPIx);
|
|
/* ͨÐÅÊý¾Ý×Ö³¤ÅäÖà (Data Length)
|
00£º8bit
|
01£º16bit
|
10£º24bit
|
11£º32bit Ïà¹Øº¯Êý */
|
extern void SPIx_CR2_DLEN_Set(SPI_Type* SPIx, uint32_t SetValue);
|
extern uint32_t SPIx_CR2_DLEN_Get(SPI_Type* SPIx);
|
|
/* ͨÐÅģʽѡÔñ (Half-Duplex mode)
|
0£º±ê×¼SPIģʽ£¬4Ïßȫ˫¹¤
|
1£ºDCNģʽ£¬4Ïß°ëË«¹¤ Ïà¹Øº¯Êý */
|
extern void SPIx_CR2_HALFDUPLEX_Set(SPI_Type* SPIx, uint32_t SetValue);
|
extern uint32_t SPIx_CR2_HALFDUPLEX_Get(SPI_Type* SPIx);
|
|
/* °ëË«¹¤Ä£Ê½ÏÂÖ÷»ú¶Áд²Ù×÷ÅäÖà (Read/Write config for Half-Duplex mode)
|
0£º4Ïß°ëË«¹¤ÐÒéÏÂÖ÷»úдÈë´Ó»ú
|
1£º4Ïß°ëË«¹¤ÐÒéÏÂÖ÷»ú¶ÁÈ¡´Ó»ú Ïà¹Øº¯Êý */
|
extern void SPIx_CR2_HD_RW_Set(SPI_Type* SPIx, uint32_t SetValue);
|
extern uint32_t SPIx_CR2_HD_RW_Get(SPI_Type* SPIx);
|
|
/* °ëË«¹¤Ä£Ê½Ï¶¨ÒåcommandÖ¡³¤¶È (Command 8 bits)
|
1£ºcommandÖ¡¹Ì¶¨Îª8bit
|
0£ºcommandÖ¡³¤¶ÈÓÉDLEN¶¨Òå Ïà¹Øº¯Êý */
|
extern void SPIx_CR2_CMD8b_Set(SPI_Type* SPIx, uint32_t SetValue);
|
extern uint32_t SPIx_CR2_CMD8b_Get(SPI_Type* SPIx);
|
|
/* MasterģʽÏÂSSN¿ØÖÆÄ£Ê½Ñ¡Ôñ (SSN mode)
|
1£ºÃ¿·¢ËÍÍêÒ»Ö¡ºóMasterÀ¸ßSSN£¬Î¬³Ö¸ßµçƽʱ¼äÓÉWAIT¼Ä´æÆ÷¿ØÖÆ
|
0£ºÃ¿·¢ËÍÍêÒ»Ö¡ºóMaster±£³ÖSSNΪµÍ Ïà¹Øº¯Êý */
|
extern void SPIx_CR2_SSNM_Set(SPI_Type* SPIx, uint32_t SetValue);
|
extern uint32_t SPIx_CR2_SSNM_Get(SPI_Type* SPIx);
|
|
/* TXONLYÓ²¼þ×Ô¶¯Çå¿ÕµÄʹÄÜ (TXONLY auto-clear enable)1£ºTXONLYÓ²¼þ×Ô¶¯ÇåÁãÓÐЧ£¬Èí¼þʹÄÜTXOºó£¬µÈ´ý·¢ËÍÍê±Ïºó£¬Ó²¼þÇåÁã0£º¹Ø±ÕTXONLYÓ²¼þ×Ô¶¯ÇåÁã Ïà¹Øº¯Êý */
|
extern void SPIx_CR2_TXO_AC_Setable(SPI_Type* SPIx, FunState NewState);
|
extern FunState SPIx_CR2_TXO_AC_Getable(SPI_Type* SPIx);
|
|
/* TXONLY¿ØÖÆÎ» (Transmit Only mode enable)
|
1£ºÆô¶¯MasterµÄµ¥·¢ËÍģʽ
|
0£º¹Ø±Õµ¥·¢ËÍģʽ£¨ÊÕ·¢È«Ë«¹¤£© Ïà¹Øº¯Êý */
|
extern void SPIx_CR2_TXO_Setable(SPI_Type* SPIx, FunState NewState);
|
extern FunState SPIx_CR2_TXO_Getable(SPI_Type* SPIx);
|
|
/* MasterģʽÏ£¬Èç¹ûSSNSENΪ1£¬Èí¼þ¿ÉÒÔͨ¹ý´Ëλ¿ØÖÆSSNÊä³öµçƽ 1£ºSSNÊä³ö¸ßµçƽ
|
0£ºSSNÊä³öµÍµçƽ Ïà¹Øº¯Êý */
|
extern void SPIx_CR2_SSN_Set(SPI_Type* SPIx, uint32_t SetValue);
|
extern uint32_t SPIx_CR2_SSN_Get(SPI_Type* SPIx);
|
|
/* MasterģʽÏ£¬Èí¼þ¿ØÖÆSSNʹÄÜ (SSN Software Enable)
|
1£ºMasterģʽÏÂSSNÊä³öÓÉÈí¼þ¿ØÖÆ
|
0£ºMasterģʽÏÂSSNÊä³öÓÉÓ²¼þ×Ô¶¯¿ØÖÆ Ïà¹Øº¯Êý */
|
extern void SPIx_CR2_SSNSEN_Setable(SPI_Type* SPIx, FunState NewState);
|
extern FunState SPIx_CR2_SSNSEN_Getable(SPI_Type* SPIx);
|
|
/* SPIʹÄÜ (SPI enable)1£ºÊ¹ÄÜSPI0£º¹Ø±ÕSPI£¬Çå¿Õ·¢ËͽÓÊÕ»º´æ Ïà¹Øº¯Êý */
|
extern void SPIx_CR2_SPIEN_Setable(SPI_Type* SPIx, FunState NewState);
|
extern FunState SPIx_CR2_SPIEN_Getable(SPI_Type* SPIx);
|
|
/* Transmit Buffer Clear£¬Èí¼þд1Çå³ý·¢ËÍ»º´æ£¬Ð´0ÎÞЧ Ïà¹Øº¯Êý */
|
extern void SPIx_CR3_TXBFC_Clr(SPI_Type* SPIx);
|
|
/* Receive Buffer Clear£¬Èí¼þд1Çå³ý·¢ËÍ»º´æ£¬Ð´0ÎÞЧ Ïà¹Øº¯Êý */
|
extern void SPIx_CR3_RXBFC_Clr(SPI_Type* SPIx);
|
|
/* Master Error Clear£¬Èí¼þд1Çå³ýHSPISTA.MERR¼Ä´æÆ÷ Ïà¹Øº¯Êý */
|
extern void SPIx_CR3_MERRC_Clr(SPI_Type* SPIx);
|
|
/* Slave Error Clear£¬Èí¼þд1Çå³ýHSPISTA.SERR¼Ä´æÆ÷ Ïà¹Øº¯Êý */
|
extern void SPIx_CR3_SERRC_Clr(SPI_Type* SPIx);
|
|
/* SPI´íÎóÖжÏʹÄÜ (Error Interrupt Enable) Ïà¹Øº¯Êý */
|
extern void SPIx_IER_ERRIE_Setable(SPI_Type* SPIx, FunState NewState);
|
extern FunState SPIx_IER_ERRIE_Getable(SPI_Type* SPIx);
|
|
/* ·¢ËÍÍê³ÉÖжÏʹÄÜ (Transmit Interrupt Enable) Ïà¹Øº¯Êý */
|
extern void SPIx_IER_TXIE_Setable(SPI_Type* SPIx, FunState NewState);
|
extern FunState SPIx_IER_TXIE_Getable(SPI_Type* SPIx);
|
|
/* ½ÓÊÕÍê³ÉÖжÏʹÄÜ (Receive Interrupt Enable) Ïà¹Øº¯Êý */
|
extern void SPIx_IER_RXIE_Setable(SPI_Type* SPIx, FunState NewState);
|
extern FunState SPIx_IER_RXIE_Getable(SPI_Type* SPIx);
|
|
/* °ëË«¹¤Ä£Ê½Ï£¨HALFDUPLEX=1£©£¬ÅäÖÃÔÚÿ¸öÊý¾ÝÖ¡µÄ×îºóbit·¢Ë͵ÄDCNÐÅºÅµçÆ½ (Data/Command transmit config)
|
0£ºDCN=0£¬±íʾÃüÁîÖ¡
|
1£ºDCN=1£¬±íʾÊý¾ÝÖ¡
|
Èí¼þÓ¦ÔÚ·¢ËÍǰÉèÖÃDCN_TX¼Ä´æÆ÷£¬Èç¹ûDCN_TX=0£¬Ó²¼þÔÚÍê³ÉÒ»Ö¡·¢Ëͺó£¬×Ô¶¯½«DCN_TXÖÃ1£¬¼´Ä¬ÈÏÖ»»á·¢ËÍÒ»¸öÃüÁîÖ¡£¬ºóÐø¶¼ÊÇÊý¾ÝÖ¡¡£ Ïà¹Øº¯Êý */
|
extern void SPIx_ISR_DCN_TX_Set(SPI_Type* SPIx, uint32_t SetValue);
|
extern uint32_t SPIx_ISR_DCN_TX_Get(SPI_Type* SPIx);
|
|
/* ½ÓÊÕ»º´æÒç³ö£¬Èí¼þд1ÇåÁã (Receive Collision flag,write 1 to flag) Ïà¹Øº¯Êý */
|
extern void SPIx_ISR_RXCOL_Clr(SPI_Type* SPIx);
|
extern FlagStatus SPIx_ISR_RXCOL_Chk(SPI_Type* SPIx);
|
|
/* ·¢ËÍ»º´æÒç³ö£¬Èí¼þд1ÇåÁã (Transmit Collision flag,write 1 to clear) Ïà¹Øº¯Êý */
|
extern void SPIx_ISR_TXCOL_Clr(SPI_Type* SPIx);
|
extern FlagStatus SPIx_ISR_TXCOL_Chk(SPI_Type* SPIx);
|
|
/* SPI¿ÕÏбêÖ¾£¬Ö»¶Á (busy flag)
|
1£ºSPI´«Êä½øÐÐÖÐ
|
0£ºSPI´«Êä¿ÕÏÐ Ïà¹Øº¯Êý */
|
extern FlagStatus SPIx_ISR_BUSY_Chk(SPI_Type* SPIx);
|
|
/* Master Error±êÖ¾(Master Error flag)
|
µ±MasterÏ´«ÊäδÂú8λSSN¾Í±»À¸ßʱ£¬MERRÖÃλ Ïà¹Øº¯Êý */
|
extern FlagStatus SPIx_ISR_MERR_Chk(SPI_Type* SPIx);
|
|
/* Slave Error±êÖ¾(Slave Error flag)
|
µ±SlaveÏ´«ÊäδÂú8λSSN¾Í±»À¸ßʱ£¬SERRÖÃλ Ïà¹Øº¯Êý */
|
extern FlagStatus SPIx_ISR_SERR_Chk(SPI_Type* SPIx);
|
|
/* TX Buffer Empty±ê־λ(TX Buffer Empty flag)
|
1£º·¢ËÍ»º´æ¿Õ£¬Èí¼þдTXBUFÇåÁã
|
0£º·¢ËÍ»º´æÂú Ïà¹Øº¯Êý */
|
extern FlagStatus SPIx_ISR_TXBE_Chk(SPI_Type* SPIx);
|
|
/* RX Buffer Full±ê־λ(RX Buffer Full flag)
|
1£º½ÓÊÕ»º´æÂú£¬Èí¼þ¶ÁRXBUFÇåÁã
|
0£º½ÓÊÕ»º´æ¿Õ Ïà¹Øº¯Êý */
|
extern FlagStatus SPIx_ISR_RXBF_Chk(SPI_Type* SPIx);
|
|
/* SPI·¢ËÍ»º´æ (Transmit Buffer) Ïà¹Øº¯Êý */
|
extern void SPIx_TXBUF_Write(SPI_Type* SPIx, uint32_t SetValue);
|
|
/* SPI½ÓÊÕ»º´æ (Receive Buffer) Ïà¹Øº¯Êý */
|
extern uint32_t SPIx_RXBUF_Read(SPI_Type* SPIx);
|
//Announce_End
|
|
void SPIx_Deinit(SPI_Type* SPIx);
|
void SPI_SSN_Set_Low(SPI_Type* SPIx);
|
void SPI_SSN_Set_High(SPI_Type* SPIx);
|
uint8_t SPI_RW_Byte(SPI_Type* SPIx, uint8_t data);
|
|
#ifdef __cplusplus
|
}
|
#endif
|
|
#endif /*__FM33A0XXEV_SPI_H */
|