1 
2 
3 
4 #ifndef __CH57x_SPI_H__
5 #define __CH57x_SPI_H__
6 
7 #ifdef __cplusplus
8  extern "C" {
9 #endif
10 
11 #include "CH579SFR.h"
12 #include "core_cm0.h"
13 
14 /**
15   * @brief  SPI0 interrupt bit define
16   */
17 
18 #define SPI0_IT_FST_BYTE        RB_SPI_IE_FST_BYTE              // 从机模式的首字节命令模式下,接收到首字节中断
19 #define SPI0_IT_FIFO_OV         RB_SPI_IE_FIFO_OV               // FIFO 溢出
20 #define SPI0_IT_DMA_END         RB_SPI_IE_DMA_END               // DMA 传输结束
21 #define SPI0_IT_FIFO_HF         RB_SPI_IE_FIFO_HF               // FIFO 使用过半
22 #define SPI0_IT_BYTE_END        RB_SPI_IE_BYTE_END              // 单字节传输完成
23 #define SPI0_IT_CNT_END         RB_SPI_IE_CNT_END               // 全部字节传输完成
24 
25 
26 
27 /**
28   * @brief  Configuration data mode
29   */
30 typedef enum
31 {
32     Mode0_LowBitINFront = 0,                    // 模式0,低位在前
33     Mode0_HighBitINFront,                       // 模式0,高位在前
34     Mode3_LowBitINFront,                        // 模式3,低位在前
35     Mode3_HighBitINFront,                       // 模式3,高位在前
36 }ModeBitOrderTypeDef;
37 
38 
39 /**
40   * @brief  Configuration SPI0 slave mode
41   */
42 typedef enum
43 {
44     Mode_DataStream = 0,                // 数据流模式
45     Mose_FirstCmd,                      // 首字节命令模式
46 }Slave_ModeTypeDef;
47 
48 
49 /**************** SPI0 */
50 void SPI0_MasterDefInit( void );                            /* 主机模式默认初始化:模式0+3线全双工+8MHz */
51 void SPI0_CLKCfg( UINT8 c );                                /* SPI0 基准时钟配置,= d*Tsys */
52 void SPI0_DataMode( ModeBitOrderTypeDef m );                /* 设置数据流模式 */
53 
54 void SPI0_MasterSendByte( UINT8 d );                        /* 发送单字节 (buffer) */
55 UINT8 SPI0_MasterRecvByte( void );                          /* 接收单字节 (buffer) */
56 
57 void SPI0_MasterTrans( UINT8 *pbuf, UINT16 len );           /* 使用FIFO连续发送多字节 */
58 void SPI0_MasterRecv( UINT8 *pbuf, UINT16 len );            /* 使用FIFO连续接收多字节 */
59 
60 void SPI0_MasterDMATrans( PUINT8 pbuf, UINT16 len);         /* DMA方式连续发送数据   */
61 void SPI0_MasterDMARecv( PUINT8 pbuf, UINT16 len);          /* DMA方式连续接收数据  */
62 
63 
64 void SPI0_SlaveInit( void );                                /* 设备模式默认初始化,建议设置MISO的GPIO对应为输入模式 */
65 #define SetFirstData(d)         (R8_SPI0_SLAVE_PRE = d)     /* 加载首字节数据内容 */
66 void SPI0_SlaveSendByte( UINT8 d );                         /* 从机模式,发送一字节数据 */
67 UINT8 SPI0_SlaveRecvByte( void );                           /* 从机模式,接收一字节数据 */
68 
69 void SPI0_SlaveTrans( UINT8 *pbuf, UINT16 len );            /* 从机模式,发送多字节数据 */
70 void SPI0_SlaveRecv( PUINT8 pbuf, UINT16 len );             /* 从机模式,接收多字节数据  */
71 
72 void SPI0_SlaveDMATrans( PUINT8 pbuf, UINT16 len);          /* 从机模式,DMA方式发送多字节数据 */
73 void SPI0_SlaveDMARecv( PUINT8 pbuf, UINT16 len);           /* 从机模式,DMA方式接收多字节数据 */
74 
75 // refer to SPI0 interrupt bit define
76 #define SPI0_ITCfg(s,f)         ((s)?(R8_SPI0_INTER_EN|=f):(R8_SPI0_INTER_EN&=~f))
77 #define SPI0_GetITFlag(f)       (R8_SPI0_INT_FLAG&f)        /* 获取中断标志状态,0-未置位,(!0)-触发 */
78 #define SPI0_ClearITFlag(f)     (R8_SPI0_INT_FLAG = f)      /* 清除当前中断标志 */
79 
80 
81 
82 
83 /**************** SPI1 */
84 void SPI1_MasterDefInit( void );                            /* 主机模式默认初始化:模式0+3线全双工+8MHz */
85 void SPI1_CLKCfg( UINT8 c );                                /* SPI1 基准时钟配置,= d*Tsys */
86 void SPI1_DataMode( ModeBitOrderTypeDef m );                /* 设置数据流模式 */
87 
88 void SPI1_MasterSendByte( UINT8 d );                        /* 发送单字节 (buffer) */
89 UINT8 SPI1_MasterRecvByte( void );                          /* 接收单字节 (buffer) */
90 
91 void SPI1_MasterTrans( UINT8 *pbuf, UINT16 len );           /* 使用FIFO连续发送多字节 */
92 void SPI1_MasterRecv( UINT8 *pbuf, UINT16 len );            /* 使用FIFO连续接收多字节 */
93 
94 
95 // refer to SPI1 interrupt bit define
96 #define SPI1_ITCfg(s,f)         ((s)?(R8_SPI1_INTER_EN|=f):(R8_SPI1_INTER_EN&=~f))
97 #define SPI1_GetITFlag(f)       (R8_SPI1_INT_FLAG&f)        /* 获取中断标志状态,0-未置位,(!0)-触发 */
98 #define SPI1_ClearITFlag(f)     (R8_SPI1_INT_FLAG = f)      /* 清除当前中断标志 */
99 
100 
101 
102 
103 #ifdef __cplusplus
104 }
105 #endif
106 
107 #endif  // __CH57x_SPI_H__
108 
109