1
1
/****************************************************************************/ /**
2
2
* @file spi.h
3
3
* @version V1.00
4
- * $Revision: 18 $
5
- * $Date: 14/10/06 1:36p $
4
+ * $Revision: 21 $
5
+ * $Date: 15/06/18 4:12p $
6
6
* @brief NUC472/NUC442 SPI driver header file
7
7
*
8
8
* @note
@@ -31,8 +31,8 @@ extern "C"
31
31
32
32
#define SPI_MODE_0 (SPI_CTL_TXNEG_Msk) /*!< CLKP=0; RX_NEG=0; TX_NEG=1 \hideinitializer */
33
33
#define SPI_MODE_1 (SPI_CTL_RXNEG_Msk) /*!< CLKP=0; RX_NEG=1; TX_NEG=0 \hideinitializer */
34
- #define SPI_MODE_2 (SPI_CTL_CLKPOL_Msk | SPI_CTL_TXNEG_Msk ) /*!< CLKP=1; RX_NEG=1; TX_NEG=0 \hideinitializer */
35
- #define SPI_MODE_3 (SPI_CTL_CLKPOL_Msk | SPI_CTL_RXNEG_Msk ) /*!< CLKP=1; RX_NEG=0; TX_NEG=1 \hideinitializer */
34
+ #define SPI_MODE_2 (SPI_CTL_CLKPOL_Msk | SPI_CTL_RXNEG_Msk ) /*!< CLKP=1; RX_NEG=1; TX_NEG=0 \hideinitializer */
35
+ #define SPI_MODE_3 (SPI_CTL_CLKPOL_Msk | SPI_CTL_TXNEG_Msk ) /*!< CLKP=1; RX_NEG=0; TX_NEG=1 \hideinitializer */
36
36
37
37
#define SPI_SLAVE (SPI_CTL_SLAVE_Msk) /*!< Set as slave \hideinitializer */
38
38
#define SPI_MASTER (0x0) /*!< Set as master \hideinitializer */
@@ -70,7 +70,7 @@ extern "C"
70
70
* @return none
71
71
* \hideinitializer
72
72
*/
73
- #define SPI_SET_SLAVE_TIMEOUT_PERIOD (spi , u32TimeoutPeriod ) ( (spi)->SSCTL = ((spi)->SSCTL & ~SPI_SSCTL_SLVTOCNT_Msk) | (u32TimeoutPeriod & 0xFFFF) )
73
+ #define SPI_SET_SLAVE_TIMEOUT_PERIOD (spi , u32TimeoutPeriod ) ( (spi)->SSCTL = ((spi)->SSCTL & ~SPI_SSCTL_SLVTOCNT_Msk) | (((uint32_t) u32TimeoutPeriod & 0xFFFF) << SPI_SSCTL_SLVTOCNT_Pos ) )
74
74
75
75
/**
76
76
* @brief Enable time out clear function for FIFO mode.
@@ -194,56 +194,41 @@ extern "C"
194
194
#define SPI_WRITE_TX (spi , u32TxData ) ( (spi)->TX = u32TxData )
195
195
196
196
/**
197
- * @brief Disable automatic slave select function and set SPI_SS pin to high state.
198
- * @param[in] spi is the base address of SPI module.
199
- * @return none
197
+ * @brief Set SPIn_SS0 pin to high state.
198
+ * @param[in] spi The pointer of the specified SPI module.
199
+ * @return None.
200
+ * @details Disable automatic slave selection function and set SPIn_SS0 pin to high state. Only available in Master mode.
200
201
* \hideinitializer
201
202
*/
202
- static __INLINE void SPI_SET_SS0_HIGH (SPI_T * spi )
203
- {
204
- spi -> SSCTL &= ~SPI_SSCTL_AUTOSS_Msk ;
205
- spi -> SSCTL |= SPI_SSCTL_SSACTPOL_Msk ;
206
- spi -> SSCTL = (spi -> SSCTL & ~SPI_SSCTL_SS_Msk ) | SPI_SS0 ;
207
- }
203
+ #define SPI_SET_SS0_HIGH (spi ) ((spi)->SSCTL = ((spi)->SSCTL & ~(SPI_SSCTL_AUTOSS_Msk|SPI_SSCTL_SSACTPOL_Msk|SPI_SS0)))
208
204
209
205
/**
210
- * @brief Disable automatic slave select function and set SPI_SS pin to low state.
211
- * @param[in] spi is the base address of SPI module.
212
- * @return none
206
+ * @brief Set SPIn_SS0 pin to low state.
207
+ * @param[in] spi The pointer of the specified SPI module.
208
+ * @return None.
209
+ * @details Disable automatic slave selection function and set SPIn_SS0 pin to low state. Only available in Master mode.
213
210
* \hideinitializer
214
211
*/
215
- static __INLINE void SPI_SET_SS0_LOW (SPI_T * spi )
216
- {
217
- spi -> SSCTL &= ~SPI_SSCTL_AUTOSS_Msk ;
218
- spi -> SSCTL &= ~SPI_SSCTL_SSACTPOL_Msk ;
219
- spi -> SSCTL = (spi -> SSCTL & ~SPI_SSCTL_SS_Msk ) | SPI_SS0 ;
220
- }
212
+ #define SPI_SET_SS0_LOW (spi ) ((spi)->SSCTL = ((spi)->SSCTL & ~(SPI_SSCTL_AUTOSS_Msk|SPI_SSCTL_SSACTPOL_Msk|SPI_SS0)) | SPI_SS0)
221
213
222
214
/**
223
- * @brief Disable automatic slave select function and set SPI_SS pin to high state.
224
- * @param[in] spi is the base address of SPI module.
225
- * @return none
215
+ * @brief Set SPIn_SS1 pin to high state.
216
+ * @param[in] spi The pointer of the specified SPI module.
217
+ * @return None.
218
+ * @details Disable automatic slave selection function and set SPIn_SS1 pin to high state. Only available in Master mode.
226
219
* \hideinitializer
227
220
*/
228
- static __INLINE void SPI_SET_SS1_HIGH (SPI_T * spi )
229
- {
230
- spi -> SSCTL &= ~SPI_SSCTL_AUTOSS_Msk ;
231
- spi -> SSCTL |= SPI_SSCTL_SSACTPOL_Msk ;
232
- spi -> SSCTL = (spi -> SSCTL & ~SPI_SSCTL_SS_Msk ) | SPI_SS1 ;
233
- }
221
+ #define SPI_SET_SS1_HIGH (spi ) ((spi)->SSCTL = ((spi)->SSCTL & ~(SPI_SSCTL_AUTOSS_Msk|SPI_SSCTL_SSACTPOL_Msk|SPI_SS1)))
234
222
235
223
/**
236
- * @brief Disable automatic slave select function and set SPI_SS pin to low state.
237
- * @param[in] spi is the base address of SPI module.
238
- * @return none
224
+ * @brief Set SPIn_SS1 pin to low state.
225
+ * @param[in] spi The pointer of the specified SPI module.
226
+ * @return None.
227
+ * @details Disable automatic slave selection function and set SPIn_SS1 pin to low state. Only available in Master mode.
239
228
* \hideinitializer
240
229
*/
241
- static __INLINE void SPI_SET_SS1_LOW (SPI_T * spi )
242
- {
243
- spi -> SSCTL &= ~SPI_SSCTL_AUTOSS_Msk ;
244
- spi -> SSCTL |= SPI_SSCTL_SSACTPOL_Msk ;
245
- spi -> SSCTL = (spi -> SSCTL & ~SPI_SSCTL_SS_Msk ) | SPI_SS1 ;
246
- }
230
+ #define SPI_SET_SS1_LOW (spi ) ((spi)->SSCTL = ((spi)->SSCTL & ~(SPI_SSCTL_AUTOSS_Msk|SPI_SSCTL_SSACTPOL_Msk|SPI_SS1)) | SPI_SS1)
231
+
247
232
248
233
/**
249
234
* @brief Enable byte reorder function.
@@ -341,14 +326,6 @@ static __INLINE void SPI_SET_DATA_WIDTH(SPI_T *spi, uint32_t u32Width)
341
326
*/
342
327
#define SPI_DISABLE (spi ) ( (spi)->CTL &= ~SPI_CTL_SPIEN_Msk )
343
328
344
- /**
345
- * @brief Enable SPI Dual IO function.
346
- * @param[in] spi is the base address of SPI module.
347
- * @return none
348
- * \hideinitializer
349
- */
350
- #define SPI_ENABLE_DUAL_MODE (spi ) ( (spi)->CTL |= SPI_CTL_DUALIOEN_Msk )
351
-
352
329
/**
353
330
* @brief Disable SPI Dual IO function.
354
331
* @param[in] spi is the base address of SPI module.
@@ -358,28 +335,20 @@ static __INLINE void SPI_SET_DATA_WIDTH(SPI_T *spi, uint32_t u32Width)
358
335
#define SPI_DISABLE_DUAL_MODE (spi ) ( (spi)->CTL &= ~SPI_CTL_DUALIOEN_Msk )
359
336
360
337
/**
361
- * @brief Set SPI Dual IO direction to input.
338
+ * @brief Enable Dual IO function and set SPI Dual IO direction to input.
362
339
* @param[in] spi is the base address of SPI module.
363
340
* @return none
364
341
* \hideinitializer
365
342
*/
366
- #define SPI_ENABLE_DUAL_INPUT_MODE (spi ) ( (spi)->CTL &= ~SPI_CTL_QDIODIR_Msk )
343
+ #define SPI_ENABLE_DUAL_INPUT_MODE (spi ) ( (spi)->CTL = ((spi)->CTL & ~SPI_CTL_QDIODIR_Msk) | SPI_CTL_DUALIOEN_Msk )
367
344
368
345
/**
369
- * @brief Set SPI Dual IO direction to output.
346
+ * @brief Enable Dual IO function and set SPI Dual IO direction to output.
370
347
* @param[in] spi is the base address of SPI module.
371
348
* @return none
372
349
* \hideinitializer
373
350
*/
374
- #define SPI_ENABLE_DUAL_OUTPUT_MODE (spi ) ( (spi)->CTL |= SPI_CTL_QDIODIR_Msk )
375
-
376
- /**
377
- * @brief Enable SPI QUAD IO function.
378
- * @param[in] spi is the base address of SPI module.
379
- * @return none
380
- * \hideinitializer
381
- */
382
- #define SPI_ENABLE_QUAD_MODE (spi ) ( (spi)->CTL |= SPI_CTL_QUADIOEN_Msk )
351
+ #define SPI_ENABLE_DUAL_OUTPUT_MODE (spi ) ( (spi)->CTL |= SPI_CTL_QDIODIR_Msk | SPI_CTL_DUALIOEN_Msk )
383
352
384
353
/**
385
354
* @brief Disable SPI Dual IO function.
@@ -395,15 +364,15 @@ static __INLINE void SPI_SET_DATA_WIDTH(SPI_T *spi, uint32_t u32Width)
395
364
* @return none
396
365
* \hideinitializer
397
366
*/
398
- #define SPI_ENABLE_QUAD_INPUT_MODE (spi ) ( (spi)->CTL &= ~SPI_CTL_QDIODIR_Msk )
367
+ #define SPI_ENABLE_QUAD_INPUT_MODE (spi ) ( (spi)->CTL = ((spi)->CTL & ~SPI_CTL_QDIODIR_Msk) | SPI_CTL_QUADIOEN_Msk )
399
368
400
369
/**
401
370
* @brief Set SPI Quad IO direction to output.
402
371
* @param[in] spi is the base address of SPI module.
403
372
* @return none
404
373
* \hideinitializer
405
374
*/
406
- #define SPI_ENABLE_QUAD_OUTPUT_MODE (spi ) ( (spi)->CTL |= SPI_CTL_QDIODIR_Msk )
375
+ #define SPI_ENABLE_QUAD_OUTPUT_MODE (spi ) ( (spi)->CTL |= SPI_CTL_QDIODIR_Msk | SPI_CTL_QUADIOEN_Msk )
407
376
408
377
/**
409
378
* @brief Trigger RX PDMA transfer.
@@ -489,3 +458,4 @@ void SPI_DisableInt(SPI_T *spi, uint32_t u32Mask);
489
458
#endif //__SPI_H__
490
459
491
460
/*** (C) COPYRIGHT 2014 Nuvoton Technology Corp. ***/
461
+
0 commit comments