1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
|
/******************************************************************************
* Copyright (C) 2017, Huada Semiconductor Co.,Ltd All rights reserved.
*
* This software is owned and published by:
* Huada Semiconductor Co.,Ltd ("HDSC").
*
* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND
* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
*
* This software contains source code for use with HDSC
* components. This software is licensed by HDSC to be adapted only
* for use in systems utilizing HDSC components. HDSC shall not be
* responsible for misuse or illegal use of this software for devices not
* supported herein. HDSC is providing this software "AS IS" and will
* not be responsible for issues arising from incorrect user implementation
* of the software.
*
* Disclaimer:
* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED , ARISING BY LAW OR OTHERWISE,
* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS),
* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING,
* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED
* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED
* WARRANTY OF NONINFRINGEMENT.
* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT,
* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT
* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR
* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA,
* SAVINGS OR PROFITS,
* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR
* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED
* FROM, THE SOFTWARE.
*
* This software may be replicated in part or whole for the licensed use,
* with the restriction that this Disclaimer and Copyright notice must be
* included with each copy of this software, whether used in part or whole,
* at all times.
*/
/*****************************************************************************/
/** \file spi.h
**
** Headerfile for SPI functions
**
**
** History:
** - 2017-05-17 1.0 Devi First Version
**
*****************************************************************************/
#ifndef __SPI_H__
#define __SPI_H__
/******************************************************************************
* Include files
*****************************************************************************/
#include "ddl.h"
/* C binding of definitions if building with C++ compiler */
#ifdef __cplusplus
extern "C"
{
#endif
//@{
/******************************************************************************
* Global type definitions
*****************************************************************************/
/**
******************************************************************************
** \brief SPI 功能通道选择设置
******************************************************************************/
/**
******************************************************************************
** \brief SPI 功能使能设置
******************************************************************************/
typedef enum en_spi_en
{
SpiMskEnable = 0x4u, ///< SPI模块使能
SpiMskDisable = 0u, ///< SPI模块禁止
}en_spi_en_t;
/**
******************************************************************************
** \brief SPI 模式配置
******************************************************************************/
typedef enum en_spi_mode
{
SpiMskMaster = 0x10u, ///<主机
SpiMskSlave = 0x00u, ///<从机
}en_spi_mode_t;
/**
******************************************************************************
** \brief SPI 时钟极性设置
******************************************************************************/
typedef enum en_spi_cpol
{
SpiMskcpollow = 0u, ///<极性为低
SpiMskcpolhigh = 0x08u, ///<极性为高
}en_spi_cpol_t;
/**
******************************************************************************
** \brief SPI 时钟相位设置
******************************************************************************/
typedef enum en_spi_cpha
{
SpiMskCphafirst = 0u, ///<第一边沿采样
SpiMskCphasecond = 0x4u, ///<第二边沿采样
}en_spi_cpha_t;
/**
******************************************************************************
** \brief SPI 时钟分频配置
*****************************************************************************/
typedef enum en_spi_clk_div
{
SpiClkMskDiv2 = 0x00u, ///<PCLK 2分频
SpiClkMskDiv4 = 0x01u, ///<PCLK 4分频
SpiClkMskDiv8 = 0x02u, ///<PCLK 8分频
SpiClkMskDiv16 = 0x03u, ///<PCLK 16分频
SpiClkMskDiv32 = 0x80u, ///<PCLK 32分频
SpiClkMskDiv64 = 0x81u, ///<PCLK 64分频
SpiClkMskDiv128 = 0x82u, ///<PCLK 128分频
}en_spi_clk_div_t;
/**
******************************************************************************
** \brief SPI 片选脚电平选择
*****************************************************************************/
typedef enum en_spi_cspin
{
SpiCsLow = 0u, ///<片选低电平
SpiCsHigh = 1u, ///<片选高电平
}en_spi_cspin_t;
/**
******************************************************************************
** \brief SPI 状态
*****************************************************************************/
typedef enum en_spi_status
{
SpiIf = 0x80u, ///<传输结束中断标志
SpiSserr = 0x20u, ///<从机模式错误标志
SpiMdf = 0x10u, ///<主机模式错误标志
SpiBusy = 0x08u, ///<SPI总线忙标志
SpiTxe = 0x04u, ///<发送缓冲器器空标志
SpiRxne = 0x02u, ///<接受缓冲器非空标志
}en_spi_status_t;
/**
******************************************************************************
** \brief SPI 功能开启函数
*****************************************************************************/
typedef enum en_spi_func
{
SpiMskRxNeIe = 0x40u, ///<接收缓冲器非空中断使能
SpiMskTxEIe = 0x20u, ///<发送缓冲器空中断使能
SpiMskDmaTxEn = 0x10u, ///<DMA硬件访问发送使能
SpiMskDmaRxEn = 0x08u, ///<DMA硬件访问接收使能
}en_spi_func_t;
/**
******************************************************************************
** \brief SPI 总体配置结构体
*****************************************************************************/
typedef struct stc_spi_cfg
{
en_spi_mode_t enSpiMode; ///< 主从模式选择
en_spi_clk_div_t enPclkDiv; ///< PCLK分频系数(波特率分频)
en_spi_cpol_t enCPOL; ///< 时钟极性选择
en_spi_cpha_t enCPHA; ///< 时钟相位选择
}stc_spi_cfg_t;
//SPI 状态获取
boolean_t Spi_GetStatus(M0P_SPI_TypeDef* SPIx,en_spi_status_t enStatus);
///<SPI 中断使能/禁止
en_result_t Spi_IrqEnable(M0P_SPI_TypeDef* SPIx);
en_result_t Spi_IrqDisable(M0P_SPI_TypeDef* SPIx);
//SPI 清除中断标记
en_result_t Spi_ClearStatus(M0P_SPI_TypeDef* SPIx);
//SPI初始化函数
en_result_t Spi_Init(M0P_SPI_TypeDef* SPIx,stc_spi_cfg_t* pstcSpiCfg);
//SPI 功能使能禁止函数
en_result_t Spi_FuncEnable(M0P_SPI_TypeDef* SPIx, en_spi_func_t enFunc);
en_result_t Spi_FuncDisable(M0P_SPI_TypeDef* SPIx, en_spi_func_t enFunc);
//SPI关闭函数
en_result_t Spi_DeInit(M0P_SPI_TypeDef* SPIx);
//SPI 配置主发送的电平
void Spi_SetCS(M0P_SPI_TypeDef* SPIx,boolean_t bFlag);
//SPI 数据字节数据收发
uint8_t Spi_RWByte(M0P_SPI_TypeDef* SPIx, uint8_t u8Data);
//SPI 数据发送
en_result_t Spi_SendData(M0P_SPI_TypeDef* SPIx, uint8_t u8Data);
void Spi_Slave_DummyWriteData(M0P_SPI_TypeDef* SPIx, uint8_t u8Data);
en_result_t Spi_SendBuf(M0P_SPI_TypeDef* SPIx, uint8_t* pu8Buf, uint32_t u32Len);
//SPI 数据接收
uint8_t Spi_ReceiveData(M0P_SPI_TypeDef* SPIx);
en_result_t Spi_ReceiveBuf(M0P_SPI_TypeDef* SPIx, uint8_t* pu8Buf, uint32_t u32Len);
//@} // Spi Group
#ifdef __cplusplus
}
#endif
#endif /* __SPI_H__ */
/******************************************************************************
* EOF (not truncated)
*****************************************************************************/
|