1 /*
2  * Copyright (c) 2024 Microchip Technology Inc.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 #ifndef _MEC5_GSPI_V1_H
7 #define _MEC5_GSPI_V1_H
8 
9 /** @addtogroup Device_Peripheral_peripherals
10   * @{
11   */
12 
13 /**
14   * @brief General Purpose SPI (MEC_GSPI0)
15   */
16 
17 typedef struct mec_gspi_regs {                  /*!< (@ 0x40009400) MEC_GSPI0 Structure                                        */
18   __IOM uint32_t  ENABLE;                       /*!< (@ 0x00000000) GSPI enable                                                */
19   __IOM uint32_t  CTRL;                         /*!< (@ 0x00000004) GSPI control                                               */
20   __IM  uint32_t  STATUS;                       /*!< (@ 0x00000008) GSPI status                                                */
21   __IOM uint8_t   TXD;                          /*!< (@ 0x0000000C) GSPI TX data                                               */
22   __IM  uint8_t   RESERVED;
23   __IM  uint16_t  RESERVED1;
24   __IOM uint8_t   RXD;                          /*!< (@ 0x00000010) GSPI TX data                                               */
25   __IM  uint8_t   RESERVED2;
26   __IM  uint16_t  RESERVED3;
27   __IOM uint32_t  CLK_CTRL;                     /*!< (@ 0x00000014) GSPI clock control                                         */
28   __IOM uint32_t  PRELOAD;                      /*!< (@ 0x00000018) GPSPI clock generator preload                              */
29 } MEC_GSPI_Type;                                /*!< Size = 28 (0x1c)                                                          */
30 
31 /** @} */ /* End of group Device_Peripheral_peripherals */
32 
33 /** @addtogroup PosMask_peripherals
34   * @{
35   */
36 /* =========================================================================================================================== */
37 /* ================                                         MEC_GSPI                                          ================ */
38 /* =========================================================================================================================== */
39 
40 /* ========================================================  ENABLE  ========================================================= */
41 #define MEC_GSPI_ENABLE_ACTV_Pos          (0UL)                     /*!< ACTV (Bit 0)                                          */
42 #define MEC_GSPI_ENABLE_ACTV_Msk          (0x1UL)                   /*!< ACTV (Bitfield-Mask: 0x01)                            */
43 /* =========================================================  CTRL  ========================================================== */
44 #define MEC_GSPI_CTRL_LSBF_Pos            (0UL)                     /*!< LSBF (Bit 0)                                          */
45 #define MEC_GSPI_CTRL_LSBF_Msk            (0x1UL)                   /*!< LSBF (Bitfield-Mask: 0x01)                            */
46 #define MEC_GSPI_CTRL_BIOEN_Pos           (1UL)                     /*!< BIOEN (Bit 1)                                         */
47 #define MEC_GSPI_CTRL_BIOEN_Msk           (0x2UL)                   /*!< BIOEN (Bitfield-Mask: 0x01)                           */
48 #define MEC_GSPI_CTRL_SPDIN_SEL_Pos       (2UL)                     /*!< SPDIN_SEL (Bit 2)                                     */
49 #define MEC_GSPI_CTRL_SPDIN_SEL_Msk       (0xcUL)                   /*!< SPDIN_SEL (Bitfield-Mask: 0x03)                       */
50 #define MEC_GSPI_CTRL_SRST_Pos            (4UL)                     /*!< SRST (Bit 4)                                          */
51 #define MEC_GSPI_CTRL_SRST_Msk            (0x10UL)                  /*!< SRST (Bitfield-Mask: 0x01)                            */
52 #define MEC_GSPI_CTRL_AUTO_RD_Pos         (5UL)                     /*!< AUTO_RD (Bit 5)                                       */
53 #define MEC_GSPI_CTRL_AUTO_RD_Msk         (0x20UL)                  /*!< AUTO_RD (Bitfield-Mask: 0x01)                         */
54 #define MEC_GSPI_CTRL_CE_Pos              (6UL)                     /*!< CE (Bit 6)                                            */
55 #define MEC_GSPI_CTRL_CE_Msk              (0x40UL)                  /*!< CE (Bitfield-Mask: 0x01)                              */
56 /* ========================================================  STATUS  ========================================================= */
57 #define MEC_GSPI_STATUS_TXBE_Pos          (0UL)                     /*!< TXBE (Bit 0)                                          */
58 #define MEC_GSPI_STATUS_TXBE_Msk          (0x1UL)                   /*!< TXBE (Bitfield-Mask: 0x01)                            */
59 #define MEC_GSPI_STATUS_RXBF_Pos          (1UL)                     /*!< RXBF (Bit 1)                                          */
60 #define MEC_GSPI_STATUS_RXBF_Msk          (0x2UL)                   /*!< RXBF (Bitfield-Mask: 0x01)                            */
61 #define MEC_GSPI_STATUS_CLKS_Pos          (2UL)                     /*!< CLKS (Bit 2)                                          */
62 #define MEC_GSPI_STATUS_CLKS_Msk          (0x4UL)                   /*!< CLKS (Bitfield-Mask: 0x01)                            */
63 /* ==========================================================  TXD  ========================================================== */
64 /* ==========================================================  RXD  ========================================================== */
65 /* =======================================================  CLK_CTRL  ======================================================== */
66 #define MEC_GSPI_CLK_CTRL_TCLKPH_Pos      (0UL)                     /*!< TCLKPH (Bit 0)                                        */
67 #define MEC_GSPI_CLK_CTRL_TCLKPH_Msk      (0x1UL)                   /*!< TCLKPH (Bitfield-Mask: 0x01)                          */
68 #define MEC_GSPI_CLK_CTRL_RCLKPH_Pos      (1UL)                     /*!< RCLKPH (Bit 1)                                        */
69 #define MEC_GSPI_CLK_CTRL_RCLKPH_Msk      (0x2UL)                   /*!< RCLKPH (Bitfield-Mask: 0x01)                          */
70 #define MEC_GSPI_CLK_CTRL_CLKPOL_Pos      (2UL)                     /*!< CLKPOL (Bit 2)                                        */
71 #define MEC_GSPI_CLK_CTRL_CLKPOL_Msk      (0x4UL)                   /*!< CLKPOL (Bitfield-Mask: 0x01)                          */
72 #define MEC_GSPI_CLK_CTRL_CLKSRC_Pos      (4UL)                     /*!< CLKSRC (Bit 4)                                        */
73 #define MEC_GSPI_CLK_CTRL_CLKSRC_Msk      (0x10UL)                  /*!< CLKSRC (Bitfield-Mask: 0x01)                          */
74 /* ========================================================  PRELOAD  ======================================================== */
75 /** @} */ /* End of group PosMask_peripherals */
76 
77 /** @addtogroup EnumValue_peripherals
78   * @{
79   */
80 /* ========================================================  ENABLE  ========================================================= */
81 /* =============================================  MEC_GSPI ENABLE ACTV [0..0]  ============================================== */
82 typedef enum {                                  /*!< MEC_GSPI_ENABLE_ACTV                                                     */
83   MEC_GSPI_ENABLE_ACTV_ON             = 1,     /*!< ON : Enable                                                               */
84 } MEC_GSPI_ENABLE_ACTV_Enum;
85 
86 /* =========================================================  CTRL  ========================================================== */
87 /* ==============================================  MEC_GSPI CTRL LSBF [0..0]  =============================================== */
88 typedef enum {                                  /*!< MEC_GSPI_CTRL_LSBF                                                       */
89   MEC_GSPI_CTRL_LSBF_EN               = 1,     /*!< EN : Enable                                                               */
90 } MEC_GSPI_CTRL_LSBF_Enum;
91 
92 /* ==============================================  MEC_GSPI CTRL BIOEN [1..1]  ============================================== */
93 typedef enum {                                  /*!< MEC_GSPI_CTRL_BIOEN                                                      */
94   MEC_GSPI_CTRL_BIOEN_EN              = 1,     /*!< EN : Enable                                                               */
95 } MEC_GSPI_CTRL_BIOEN_Enum;
96 
97 /* ============================================  MEC_GSPI CTRL SPDIN_SEL [2..3]  ============================================ */
98 typedef enum {                                  /*!< MEC_GSPI_CTRL_SPDIN_SEL                                                  */
99   MEC_GSPI_CTRL_SPDIN_SEL_FD          = 0,     /*!< FD : Full Duplex                                                          */
100   MEC_GSPI_CTRL_SPDIN_SEL_HD          = 1,     /*!< HD : Half Duplex                                                          */
101   MEC_GSPI_CTRL_SPDIN_SEL_DUAL        = 2,     /*!< DUAL : Dual                                                               */
102 } MEC_GSPI_CTRL_SPDIN_SEL_Enum;
103 
104 /* ==============================================  MEC_GSPI CTRL SRST [4..4]  =============================================== */
105 typedef enum {                                  /*!< MEC_GSPI_CTRL_SRST                                                       */
106   MEC_GSPI_CTRL_SRST_EN               = 1,     /*!< EN : Enable                                                               */
107 } MEC_GSPI_CTRL_SRST_Enum;
108 
109 /* =============================================  MEC_GSPI CTRL AUTO_RD [5..5]  ============================================= */
110 typedef enum {                                  /*!< MEC_GSPI_CTRL_AUTO_RD                                                    */
111   MEC_GSPI_CTRL_AUTO_RD_EN            = 1,     /*!< EN : Enable                                                               */
112 } MEC_GSPI_CTRL_AUTO_RD_Enum;
113 
114 /* ===============================================  MEC_GSPI CTRL CE [6..6]  ================================================ */
115 typedef enum {                                  /*!< MEC_GSPI_CTRL_CE                                                         */
116   MEC_GSPI_CTRL_CE_ASSERT             = 1,     /*!< ASSERT : Assert chip select                                               */
117 } MEC_GSPI_CTRL_CE_Enum;
118 
119 /* ========================================================  STATUS  ========================================================= */
120 /* =============================================  MEC_GSPI STATUS TXBE [0..0]  ============================================== */
121 typedef enum {                                  /*!< MEC_GSPI_STATUS_TXBE                                                     */
122   MEC_GSPI_STATUS_TXBE_ACTIVE         = 1,     /*!< ACTIVE : Active                                                           */
123 } MEC_GSPI_STATUS_TXBE_Enum;
124 
125 /* =============================================  MEC_GSPI STATUS RXBF [1..1]  ============================================== */
126 typedef enum {                                  /*!< MEC_GSPI_STATUS_RXBF                                                     */
127   MEC_GSPI_STATUS_RXBF_ACTIVE         = 1,     /*!< ACTIVE : Active                                                           */
128 } MEC_GSPI_STATUS_RXBF_Enum;
129 
130 /* =============================================  MEC_GSPI STATUS CLKS [2..2]  ============================================== */
131 typedef enum {                                  /*!< MEC_GSPI_STATUS_CLKS                                                     */
132   MEC_GSPI_STATUS_CLKS_ACTIVE         = 1,     /*!< ACTIVE : Active                                                           */
133 } MEC_GSPI_STATUS_CLKS_Enum;
134 
135 /* ==========================================================  TXD  ========================================================== */
136 /* ==========================================================  RXD  ========================================================== */
137 /* =======================================================  CLK_CTRL  ======================================================== */
138 /* ===========================================  MEC_GSPI CLK_CTRL TCLKPH [0..0]  ============================================ */
139 typedef enum {                                  /*!< MEC_GSPI_CLK_CTRL_TCLKPH                                                 */
140   MEC_GSPI_CLK_CTRL_TCLKPH_TXPRE1_RX1 = 0,     /*!< TXPRE1_RX1 : TX data valid on before first clock edge and input
141                                                      data sampled on first edge                                                */
142   MEC_GSPI_CLK_CTRL_TCLKPH_TX1_RX2    = 1,     /*!< TX1_RX2 : TX data valid on after first clock edge and input
143                                                      data sampled on second edge                                               */
144 } MEC_GSPI_CLK_CTRL_TCLKPH_Enum;
145 
146 /* ===========================================  MEC_GSPI CLK_CTRL RCLKPH [1..1]  ============================================ */
147 typedef enum {                                  /*!< MEC_GSPI_CLK_CTRL_RCLKPH                                                 */
148   MEC_GSPI_CLK_CTRL_RCLKPH_RXO        = 0,     /*!< RXO : RX data expected valid on first clock edge and sampled
149                                                      on first and following odd edges                                          */
150   MEC_GSPI_CLK_CTRL_RCLKPH_RXE        = 1,     /*!< RXE : RX data expected valid after first clock edge and sampled
151                                                      on following even edges                                                   */
152 } MEC_GSPI_CLK_CTRL_RCLKPH_Enum;
153 
154 /* ===========================================  MEC_GSPI CLK_CTRL CLKPOL [2..2]  ============================================ */
155 typedef enum {                                  /*!< MEC_GSPI_CLK_CTRL_CLKPOL                                                 */
156   MEC_GSPI_CLK_CTRL_CLKPOL_LO         = 0,     /*!< LO : SPI clock state is low when idle                                     */
157   MEC_GSPI_CLK_CTRL_CLKPOL_HI         = 1,     /*!< HI : SPI clock state is high when idle                                    */
158 } MEC_GSPI_CLK_CTRL_CLKPOL_Enum;
159 
160 /* ===========================================  MEC_GSPI CLK_CTRL CLKSRC [4..4]  ============================================ */
161 typedef enum {                                  /*!< MEC_GSPI_CLK_CTRL_CLKSRC                                                 */
162   MEC_GSPI_CLK_CTRL_CLKSRC_48M        = 0,     /*!< 48M : 48MHz input to SPI clock generator                                  */
163   MEC_GSPI_CLK_CTRL_CLKSRC_2M         = 1,     /*!< 2M : 2MHz input to SPI clock generator                                    */
164 } MEC_GSPI_CLK_CTRL_CLKSRC_Enum;
165 
166 /** @} */ /* End of group EnumValue_peripherals */
167 
168 #endif /* _MEC5_GSPI_V1_H */
169