VSF Documented
spi.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __HAL_DRIVER_NUVOTON_M480_SPI_H__
19#define __HAL_DRIVER_NUVOTON_M480_SPI_H__
20
21/*============================ INCLUDES ======================================*/
22
23#include "hal/vsf_hal_cfg.h"
24#include "../../__device.h"
25
26#if VSF_HAL_USE_SPI == ENABLED
27
29
30/*============================ MACROS ========================================*/
31
32#define SPI_SSCTL_POS 21
33
34#define VSF_SPI_CFG_REIMPLEMENT_TYPE_MODE ENABLED
35#define VSF_SPI_CFG_REIMPLEMENT_TYPE_STATUS ENABLED
36#define VSF_SPI_CFG_REIMPLEMENT_TYPE_IRQ_MASK ENABLED
37
38/*============================ MACROFIED FUNCTIONS ===========================*/
39/*============================ TYPES =========================================*/
40
41typedef enum vsf_spi_irq_mask_t {
43 VSF_SPI_IRQ_MASK_CPL = 1 << 1, // SPI completed recepiton and transmission
45
46typedef enum vsf_spi_mode_t {
47 // CTL: [1 << 0 ~ 1 << 20]
49 VSF_SPI_SLAVE = SPI_CTL_SLAVE_Msk,
51
52 VSF_SPI_MODE_0 = SPI_CTL_TXNEG_Msk,
53 VSF_SPI_MODE_1 = SPI_CTL_RXNEG_Msk,
54 VSF_SPI_MODE_2 = SPI_CTL_CLKPOL_Msk | SPI_CTL_RXNEG_Msk,
55 VSF_SPI_MODE_3 = SPI_CTL_CLKPOL_Msk | SPI_CTL_TXNEG_Msk,
57
59 VSF_SPI_LSB_FIRST = SPI_CTL_LSB_Msk,
61
62 VSF_SPI_DATASIZE_8 = ( 8 << SPI_CTL_DWIDTH_Pos),
63 VSF_SPI_DATASIZE_9 = ( 9 << SPI_CTL_DWIDTH_Pos),
64 VSF_SPI_DATASIZE_10 = (10 << SPI_CTL_DWIDTH_Pos),
65 VSF_SPI_DATASIZE_11 = (11 << SPI_CTL_DWIDTH_Pos),
66 VSF_SPI_DATASIZE_12 = (12 << SPI_CTL_DWIDTH_Pos),
67 VSF_SPI_DATASIZE_13 = (13 << SPI_CTL_DWIDTH_Pos),
68 VSF_SPI_DATASIZE_14 = (14 << SPI_CTL_DWIDTH_Pos),
69 VSF_SPI_DATASIZE_15 = (15 << SPI_CTL_DWIDTH_Pos),
70 VSF_SPI_DATASIZE_16 = (16 << SPI_CTL_DWIDTH_Pos),
71 VSF_SPI_DATASIZE_17 = (17 << SPI_CTL_DWIDTH_Pos),
72 VSF_SPI_DATASIZE_18 = (18 << SPI_CTL_DWIDTH_Pos),
73 VSF_SPI_DATASIZE_19 = (19 << SPI_CTL_DWIDTH_Pos),
74 VSF_SPI_DATASIZE_20 = (20 << SPI_CTL_DWIDTH_Pos),
75 VSF_SPI_DATASIZE_21 = (21 << SPI_CTL_DWIDTH_Pos),
76 VSF_SPI_DATASIZE_22 = (22 << SPI_CTL_DWIDTH_Pos),
77 VSF_SPI_DATASIZE_23 = (23 << SPI_CTL_DWIDTH_Pos),
78 VSF_SPI_DATASIZE_24 = (24 << SPI_CTL_DWIDTH_Pos),
79 VSF_SPI_DATASIZE_25 = (25 << SPI_CTL_DWIDTH_Pos),
80 VSF_SPI_DATASIZE_26 = (26 << SPI_CTL_DWIDTH_Pos),
81 VSF_SPI_DATASIZE_27 = (27 << SPI_CTL_DWIDTH_Pos),
82 VSF_SPI_DATASIZE_28 = (28 << SPI_CTL_DWIDTH_Pos),
83 VSF_SPI_DATASIZE_29 = (29 << SPI_CTL_DWIDTH_Pos),
84 VSF_SPI_DATASIZE_30 = (30 << SPI_CTL_DWIDTH_Pos),
85 VSF_SPI_DATASIZE_31 = (31 << SPI_CTL_DWIDTH_Pos),
86 VSF_SPI_DATASIZE_32 = ( 0 << SPI_CTL_DWIDTH_Pos),
87 VSF_SPI_DATASIZE_MASK = SPI_CTL_DWIDTH_Msk,
88
90 SPI_HALF_DUPLEX = SPI_CTL_HALFDPX_Msk,
92
93 // This bit is used to select the data input/output direction
94 // in half-duplex transfer and Dual/Quad transfer
96 SPI_DATA_OUTPUT_DIRECTION = SPI_CTL_DATDIR_Msk,
97
99 SPI_RECEIVE_ONLY_MODE_ENABLED = SPI_CTL_RXONLY_Msk,
100
101 // SSCTL, [1 << 21 ~ 1 << 24]
102 SPI_AUTO_SLAVE_SELECTION = SPI_SSCTL_AUTOSS_Pos + SPI_SSCTL_POS,
103 SPI_AUTO_SLAVE_SELECTION_MSK = 1 << (SPI_SSCTL_AUTOSS_Pos + SPI_SSCTL_POS),
104
107
108
110 VSF_SPI_SLAVE_SELECTION_ACTIVE_HIGH = 1 << (SPI_SSCTL_SSACTPOL_Pos + SPI_SSCTL_POS),
112
113typedef struct vsf_spi_status_t {
114 union {
117 };
119
120/*============================ INCLUDES ======================================*/
121
122#define VSF_SPI_CFG_DEC_PREFIX vsf_hw
123#define VSF_SPI_CFG_DEC_UPCASE_PREFIX VSF_HW
125
126/*============================ TYPES =========================================*/
127/*============================ GLOBAL VARIABLES ==============================*/
128/*============================ PROTOTYPES ====================================*/
129
130#endif
131#endif
vsf_spi_mode_t
Definition spi.h:33
@ VSF_SPI_DATASIZE_31
Definition spi.h:67
@ VSF_SPI_SLAVE
Definition spi.h:34
@ VSF_SPI_DATASIZE_16
Definition spi.h:52
@ VSF_SPI_DATASIZE_28
Definition spi.h:64
@ VSF_SPI_DATASIZE_17
Definition spi.h:53
@ VSF_SPI_DATASIZE_9
Definition spi.h:45
@ VSF_SPI_DATASIZE_18
Definition spi.h:54
@ VSF_SPI_DATASIZE_11
Definition spi.h:47
@ VSF_SPI_MODE_1
Definition spi.h:38
@ VSF_SPI_DATASIZE_20
Definition spi.h:56
@ VSF_SPI_DATASIZE_21
Definition spi.h:57
@ VSF_SPI_DATASIZE_8
datasize is 8 bits
Definition spi.h:44
@ VSF_SPI_DATASIZE_27
Definition spi.h:63
@ VSF_SPI_DATASIZE_14
Definition spi.h:50
@ VSF_SPI_MASTER
Definition spi.h:35
@ VSF_SPI_DATASIZE_26
Definition spi.h:62
@ VSF_SPI_DATASIZE_13
Definition spi.h:49
@ VSF_SPI_DATASIZE_32
Definition spi.h:68
@ VSF_SPI_DATASIZE_12
Definition spi.h:48
@ VSF_SPI_DATASIZE_22
Definition spi.h:58
@ VSF_SPI_MODE_0
Definition spi.h:37
@ VSF_SPI_DATASIZE_24
Definition spi.h:60
@ VSF_SPI_DATASIZE_29
Definition spi.h:65
@ VSF_SPI_DATASIZE_25
Definition spi.h:61
@ VSF_SPI_MODE_3
Definition spi.h:40
@ VSF_SPI_DATASIZE_30
Definition spi.h:66
@ VSF_SPI_DATASIZE_19
Definition spi.h:55
@ VSF_SPI_DATASIZE_23
Definition spi.h:59
@ VSF_SPI_MODE_2
Definition spi.h:39
@ VSF_SPI_DATASIZE_10
Definition spi.h:46
@ VSF_SPI_DATASIZE_15
Definition spi.h:51
#define SPI_SSCTL_POS
Definition spi.h:32
vsf_spi_irq_mask_t
Definition spi.h:41
@ VSF_SPI_IRQ_MASK_CPL
Definition spi.h:43
@ VSF_SPI_IRQ_MASK_TX_CPL
Definition spi.h:42
struct vsf_spi_status_t vsf_spi_status_t
@ SPI_DATA_INPUT_DIRECTION
Definition spi.h:95
@ SPI_RECEIVE_ONLY_MODE_DISABLED
Definition spi.h:98
@ VSF_SPI_MODE_MASK
Definition spi.h:56
@ VSF_SPI_SLAVE_SELECTION_ACTIVE_LOW
Definition spi.h:109
@ SPI_AUTO_SLAVE_SELECTION_MSK
Definition spi.h:103
@ VSF_SPI_BIT_ORDER_MASK
Definition spi.h:60
@ VSF_SPI_LSB_FIRST
Definition spi.h:59
@ VSF_SPI_SLAVE_SELECTION_ACTIVE_HIGH
Definition spi.h:110
@ SPI_AUTO_SLAVE_SELECTION_DISABLE
Definition spi.h:105
@ SPI_DUPLEX_MASK
Definition spi.h:91
@ SPI_DATA_OUTPUT_DIRECTION
Definition spi.h:96
@ VSF_SPI_DIR_MODE_MASK
Definition spi.h:50
@ VSF_SPI_MSB_FIRST
Definition spi.h:58
@ SPI_RECEIVE_ONLY_MODE_ENABLED
Definition spi.h:99
@ SPI_FULL_DUPLEX
Definition spi.h:89
@ SPI_AUTO_SLAVE_SELECTION
Definition spi.h:102
@ SPI_AUTO_SLAVE_SELECTION_ENABLE
Definition spi.h:106
@ VSF_SPI_DATASIZE_MASK
Definition spi.h:87
@ SPI_HALF_DUPLEX
Definition spi.h:90
unsigned uint32_t
Definition stdint.h:9
Definition vsf_template_hal_driver.h:196
Definition vsf_template_spi.h:484
vk_av_control_value_t value
Definition vsf_audio.h:171
vsf_spi_irq_mask_t
Predefined VSF SPI interrupt that can be reimplemented in specific hal drivers.
Definition vsf_template_spi.h:454