1 /*
2  * Copyright (c) 2024 Microchip Technology Inc.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 #ifndef _MEC5_KSCAN_V1_H
7 #define _MEC5_KSCAN_V1_H
8 
9 /** @addtogroup Device_Peripheral_peripherals
10   * @{
11   */
12 
13 /**
14   * @brief Keyboard scan matrix (MEC_KSCAN0)
15   */
16 
17 typedef struct mec_kscan_regs {                 /*!< (@ 0x40009C00) MEC_KSCAN0 Structure                                       */
18   __IM  uint8_t   RESERVED[4];
19   __IOM uint8_t   KSO_SEL;                      /*!< (@ 0x00000004) Key scan output select                                     */
20   __IM  uint8_t   RESERVED1[3];
21   __IM  uint8_t   KSI_IN;                       /*!< (@ 0x00000008) Key scan input pin state                                   */
22   __IM  uint8_t   RESERVED2[3];
23   __IOM uint8_t   KSI_STS;                      /*!< (@ 0x0000000C) Key scan inputs status                                     */
24   __IM  uint8_t   RESERVED3[3];
25   __IOM uint8_t   KSI_INT_EN;                   /*!< (@ 0x00000010) Key scan inputs interrupt enables                          */
26   __IM  uint8_t   RESERVED4[3];
27   __OM  uint8_t   EXT_CTRL;                     /*!< (@ 0x00000014) Key scan extended control register                         */
28 } MEC_KSCAN_Type;                               /*!< Size = 21 (0x15)                                                          */
29 
30 /** @} */ /* End of group Device_Peripheral_peripherals */
31 
32 /** @addtogroup PosMask_peripherals
33   * @{
34   */
35 /* ========================================================  KSO_SEL  ======================================================== */
36 #define MEC_KSCAN_KSO_SEL_OSEL_Pos        (0UL)                     /*!< OSEL (Bit 0)                                          */
37 #define MEC_KSCAN_KSO_SEL_OSEL_Msk        (0x1fUL)                  /*!< OSEL (Bitfield-Mask: 0x1f)                            */
38 #define MEC_KSCAN_KSO_SEL_KSO_ALL_Pos     (5UL)                     /*!< KSO_ALL (Bit 5)                                       */
39 #define MEC_KSCAN_KSO_SEL_KSO_ALL_Msk     (0x20UL)                  /*!< KSO_ALL (Bitfield-Mask: 0x01)                         */
40 #define MEC_KSCAN_KSO_SEL_KSCAN_DIS_Pos   (6UL)                     /*!< KSCAN_DIS (Bit 6)                                     */
41 #define MEC_KSCAN_KSO_SEL_KSCAN_DIS_Msk   (0x40UL)                  /*!< KSCAN_DIS (Bitfield-Mask: 0x01)                       */
42 #define MEC_KSCAN_KSO_SEL_KSO_INVERT_Pos  (7UL)                     /*!< KSO_INVERT (Bit 7)                                    */
43 #define MEC_KSCAN_KSO_SEL_KSO_INVERT_Msk  (0x80UL)                  /*!< KSO_INVERT (Bitfield-Mask: 0x01)                      */
44 /* ========================================================  KSI_IN  ========================================================= */
45 /* ========================================================  KSI_STS  ======================================================== */
46 #define MEC_KSCAN_KSI_STS_KSI_IN0_Pos     (0UL)                     /*!< KSI_IN0 (Bit 0)                                       */
47 #define MEC_KSCAN_KSI_STS_KSI_IN0_Msk     (0x1UL)                   /*!< KSI_IN0 (Bitfield-Mask: 0x01)                         */
48 #define MEC_KSCAN_KSI_STS_KSI_IN1_Pos     (1UL)                     /*!< KSI_IN1 (Bit 1)                                       */
49 #define MEC_KSCAN_KSI_STS_KSI_IN1_Msk     (0x2UL)                   /*!< KSI_IN1 (Bitfield-Mask: 0x01)                         */
50 #define MEC_KSCAN_KSI_STS_KSI_IN2_Pos     (2UL)                     /*!< KSI_IN2 (Bit 2)                                       */
51 #define MEC_KSCAN_KSI_STS_KSI_IN2_Msk     (0x4UL)                   /*!< KSI_IN2 (Bitfield-Mask: 0x01)                         */
52 #define MEC_KSCAN_KSI_STS_KSI_IN3_Pos     (3UL)                     /*!< KSI_IN3 (Bit 3)                                       */
53 #define MEC_KSCAN_KSI_STS_KSI_IN3_Msk     (0x8UL)                   /*!< KSI_IN3 (Bitfield-Mask: 0x01)                         */
54 #define MEC_KSCAN_KSI_STS_KSI_IN4_Pos     (4UL)                     /*!< KSI_IN4 (Bit 4)                                       */
55 #define MEC_KSCAN_KSI_STS_KSI_IN4_Msk     (0x10UL)                  /*!< KSI_IN4 (Bitfield-Mask: 0x01)                         */
56 #define MEC_KSCAN_KSI_STS_KSI_IN5_Pos     (5UL)                     /*!< KSI_IN5 (Bit 5)                                       */
57 #define MEC_KSCAN_KSI_STS_KSI_IN5_Msk     (0x20UL)                  /*!< KSI_IN5 (Bitfield-Mask: 0x01)                         */
58 #define MEC_KSCAN_KSI_STS_KSI_IN6_Pos     (6UL)                     /*!< KSI_IN6 (Bit 6)                                       */
59 #define MEC_KSCAN_KSI_STS_KSI_IN6_Msk     (0x40UL)                  /*!< KSI_IN6 (Bitfield-Mask: 0x01)                         */
60 #define MEC_KSCAN_KSI_STS_KSI_IN7_Pos     (7UL)                     /*!< KSI_IN7 (Bit 7)                                       */
61 #define MEC_KSCAN_KSI_STS_KSI_IN7_Msk     (0x80UL)                  /*!< KSI_IN7 (Bitfield-Mask: 0x01)                         */
62 /* ======================================================  KSI_INT_EN  ======================================================= */
63 #define MEC_KSCAN_KSI_INT_EN_KSI_IN0_Pos  (0UL)                     /*!< KSI_IN0 (Bit 0)                                       */
64 #define MEC_KSCAN_KSI_INT_EN_KSI_IN0_Msk  (0x1UL)                   /*!< KSI_IN0 (Bitfield-Mask: 0x01)                         */
65 #define MEC_KSCAN_KSI_INT_EN_KSI_IN1_Pos  (1UL)                     /*!< KSI_IN1 (Bit 1)                                       */
66 #define MEC_KSCAN_KSI_INT_EN_KSI_IN1_Msk  (0x2UL)                   /*!< KSI_IN1 (Bitfield-Mask: 0x01)                         */
67 #define MEC_KSCAN_KSI_INT_EN_KSI_IN2_Pos  (2UL)                     /*!< KSI_IN2 (Bit 2)                                       */
68 #define MEC_KSCAN_KSI_INT_EN_KSI_IN2_Msk  (0x4UL)                   /*!< KSI_IN2 (Bitfield-Mask: 0x01)                         */
69 #define MEC_KSCAN_KSI_INT_EN_KSI_IN3_Pos  (3UL)                     /*!< KSI_IN3 (Bit 3)                                       */
70 #define MEC_KSCAN_KSI_INT_EN_KSI_IN3_Msk  (0x8UL)                   /*!< KSI_IN3 (Bitfield-Mask: 0x01)                         */
71 #define MEC_KSCAN_KSI_INT_EN_KSI_IN4_Pos  (4UL)                     /*!< KSI_IN4 (Bit 4)                                       */
72 #define MEC_KSCAN_KSI_INT_EN_KSI_IN4_Msk  (0x10UL)                  /*!< KSI_IN4 (Bitfield-Mask: 0x01)                         */
73 #define MEC_KSCAN_KSI_INT_EN_KSI_IN5_Pos  (5UL)                     /*!< KSI_IN5 (Bit 5)                                       */
74 #define MEC_KSCAN_KSI_INT_EN_KSI_IN5_Msk  (0x20UL)                  /*!< KSI_IN5 (Bitfield-Mask: 0x01)                         */
75 #define MEC_KSCAN_KSI_INT_EN_KSI_IN6_Pos  (6UL)                     /*!< KSI_IN6 (Bit 6)                                       */
76 #define MEC_KSCAN_KSI_INT_EN_KSI_IN6_Msk  (0x40UL)                  /*!< KSI_IN6 (Bitfield-Mask: 0x01)                         */
77 #define MEC_KSCAN_KSI_INT_EN_KSI_IN7_Pos  (7UL)                     /*!< KSI_IN7 (Bit 7)                                       */
78 #define MEC_KSCAN_KSI_INT_EN_KSI_IN7_Msk  (0x80UL)                  /*!< KSI_IN7 (Bitfield-Mask: 0x01)                         */
79 /* =======================================================  EXT_CTRL  ======================================================== */
80 #define MEC_KSCAN_EXT_CTRL_PREDRIVE_Pos   (0UL)                     /*!< PREDRIVE (Bit 0)                                      */
81 #define MEC_KSCAN_EXT_CTRL_PREDRIVE_Msk   (0x1UL)                   /*!< PREDRIVE (Bitfield-Mask: 0x01)                        */
82 
83 /** @} */ /* End of group PosMask_peripherals */
84 
85 /** @addtogroup EnumValue_peripherals
86   * @{
87   */
88 /* ========================================================  KSO_SEL  ======================================================== */
89 /* ============================================  MEC_KSCAN KSO_SEL OSEL [0..4]  ============================================= */
90 typedef enum {                                  /*!< MEC_KSCAN_KSO_SEL_OSEL                                                   */
91   MEC_KSCAN_KSO_SEL_OSEL_KSO00        = 0,     /*!< KSO00 : Select KSO 0                                                      */
92   MEC_KSCAN_KSO_SEL_OSEL_KSO01        = 1,     /*!< KSO01 : Select KSO 1                                                      */
93   MEC_KSCAN_KSO_SEL_OSEL_KSO02        = 2,     /*!< KSO02 : Select KSO 2                                                      */
94   MEC_KSCAN_KSO_SEL_OSEL_KSO03        = 3,     /*!< KSO03 : Select KSO 3                                                      */
95   MEC_KSCAN_KSO_SEL_OSEL_KSO04        = 4,     /*!< KSO04 : Select KSO 4                                                      */
96   MEC_KSCAN_KSO_SEL_OSEL_KSO05        = 5,     /*!< KSO05 : Select KSO 5                                                      */
97   MEC_KSCAN_KSO_SEL_OSEL_KSO06        = 6,     /*!< KSO06 : Select KSO 6                                                      */
98   MEC_KSCAN_KSO_SEL_OSEL_KSO07        = 7,     /*!< KSO07 : Select KSO 7                                                      */
99   MEC_KSCAN_KSO_SEL_OSEL_KSO08        = 8,     /*!< KSO08 : Select KSO 8                                                      */
100   MEC_KSCAN_KSO_SEL_OSEL_KSO09        = 9,     /*!< KSO09 : Select KSO 9                                                      */
101   MEC_KSCAN_KSO_SEL_OSEL_KSO10        = 10,    /*!< KSO10 : Select KSO 10                                                     */
102   MEC_KSCAN_KSO_SEL_OSEL_KSO11        = 11,    /*!< KSO11 : Select KSO 11                                                     */
103   MEC_KSCAN_KSO_SEL_OSEL_KSO12        = 12,    /*!< KSO12 : Select KSO 12                                                     */
104   MEC_KSCAN_KSO_SEL_OSEL_KSO13        = 13,    /*!< KSO13 : Select KSO 13                                                     */
105   MEC_KSCAN_KSO_SEL_OSEL_KSO14        = 14,    /*!< KSO14 : Select KSO 14                                                     */
106   MEC_KSCAN_KSO_SEL_OSEL_KSO15        = 15,    /*!< KSO15 : Select KSO 15                                                     */
107 } MEC_KSCAN_KSO_SEL_OSEL_Enum;
108 
109 /* ========================================================  KSI_IN  ========================================================= */
110 /* ========================================================  KSI_STS  ======================================================== */
111 /* ===========================================  MEC_KSCAN KSI_STS KSI_IN0 [0..0]  =========================================== */
112 typedef enum {                                  /*!< MEC_KSCAN_KSI_STS_KSI_IN0                                                */
113   MEC_KSCAN_KSI_STS_KSI_IN0_ACTIVE    = 1,     /*!< ACTIVE : KSI_IN0 falling edge detected                                    */
114 } MEC_KSCAN_KSI_STS_KSI_IN0_Enum;
115 
116 /* ===========================================  MEC_KSCAN KSI_STS KSI_IN1 [1..1]  =========================================== */
117 typedef enum {                                  /*!< MEC_KSCAN_KSI_STS_KSI_IN1                                                */
118   MEC_KSCAN_KSI_STS_KSI_IN1_ACTIVE    = 1,     /*!< ACTIVE : KSI_IN1 falling edge detected                                    */
119 } MEC_KSCAN_KSI_STS_KSI_IN1_Enum;
120 
121 /* ===========================================  MEC_KSCAN KSI_STS KSI_IN2 [2..2]  =========================================== */
122 typedef enum {                                  /*!< MEC_KSCAN_KSI_STS_KSI_IN2                                                */
123   MEC_KSCAN_KSI_STS_KSI_IN2_ACTIVE    = 1,     /*!< ACTIVE : KSI_IN2 falling edge detected                                    */
124 } MEC_KSCAN_KSI_STS_KSI_IN2_Enum;
125 
126 /* ===========================================  MEC_KSCAN KSI_STS KSI_IN3 [3..3]  =========================================== */
127 typedef enum {                                  /*!< MEC_KSCAN_KSI_STS_KSI_IN3                                                */
128   MEC_KSCAN_KSI_STS_KSI_IN3_ACTIVE    = 1,     /*!< ACTIVE : KSI_IN3 falling edge detected                                    */
129 } MEC_KSCAN_KSI_STS_KSI_IN3_Enum;
130 
131 /* ===========================================  MEC_KSCAN KSI_STS KSI_IN4 [4..4]  =========================================== */
132 typedef enum {                                  /*!< MEC_KSCAN_KSI_STS_KSI_IN4                                                */
133   MEC_KSCAN_KSI_STS_KSI_IN4_ACTIVE    = 1,     /*!< ACTIVE : KSI_IN4 falling edge detected                                    */
134 } MEC_KSCAN_KSI_STS_KSI_IN4_Enum;
135 
136 /* ===========================================  MEC_KSCAN KSI_STS KSI_IN5 [5..5]  =========================================== */
137 typedef enum {                                  /*!< MEC_KSCAN_KSI_STS_KSI_IN5                                                */
138   MEC_KSCAN_KSI_STS_KSI_IN5_ACTIVE    = 1,     /*!< ACTIVE : KSI_IN5 falling edge detected                                    */
139 } MEC_KSCAN_KSI_STS_KSI_IN5_Enum;
140 
141 /* ===========================================  MEC_KSCAN KSI_STS KSI_IN6 [6..6]  =========================================== */
142 typedef enum {                                  /*!< MEC_KSCAN_KSI_STS_KSI_IN6                                                */
143   MEC_KSCAN_KSI_STS_KSI_IN6_ACTIVE    = 1,     /*!< ACTIVE : KSI_IN6 falling edge detected                                    */
144 } MEC_KSCAN_KSI_STS_KSI_IN6_Enum;
145 
146 /* ===========================================  MEC_KSCAN KSI_STS KSI_IN7 [7..7]  =========================================== */
147 typedef enum {                                  /*!< MEC_KSCAN_KSI_STS_KSI_IN7                                                */
148   MEC_KSCAN_KSI_STS_KSI_IN7_ACTIVE    = 1,     /*!< ACTIVE : KSI_IN7 falling edge detected                                    */
149 } MEC_KSCAN_KSI_STS_KSI_IN7_Enum;
150 
151 /* ======================================================  KSI_INT_EN  ======================================================= */
152 /* =========================================  MEC_KSCAN KSI_INT_EN KSI_IN0 [0..0]  ========================================== */
153 typedef enum {                                  /*!< MEC_KSCAN_KSI_INT_EN_KSI_IN0                                             */
154   MEC_KSCAN_KSI_INT_EN_KSI_IN0_IEN    = 1,     /*!< IEN : KSI_IN0 falling edge detected                                       */
155 } MEC_KSCAN_KSI_INT_EN_KSI_IN0_Enum;
156 
157 /* =========================================  MEC_KSCAN KSI_INT_EN KSI_IN1 [1..1]  ========================================== */
158 typedef enum {                                  /*!< MEC_KSCAN_KSI_INT_EN_KSI_IN1                                             */
159   MEC_KSCAN_KSI_INT_EN_KSI_IN1_IEN    = 1,     /*!< IEN : KSI_IN1 falling edge detected                                       */
160 } MEC_KSCAN_KSI_INT_EN_KSI_IN1_Enum;
161 
162 /* =========================================  MEC_KSCAN KSI_INT_EN KSI_IN2 [2..2]  ========================================== */
163 typedef enum {                                  /*!< MEC_KSCAN_KSI_INT_EN_KSI_IN2                                             */
164   MEC_KSCAN_KSI_INT_EN_KSI_IN2_IEN    = 1,     /*!< IEN : KSI_IN2 enable falling edge interrupt                               */
165 } MEC_KSCAN_KSI_INT_EN_KSI_IN2_Enum;
166 
167 /* =========================================  MEC_KSCAN KSI_INT_EN KSI_IN3 [3..3]  ========================================== */
168 typedef enum {                                  /*!< MEC_KSCAN_KSI_INT_EN_KSI_IN3                                             */
169   MEC_KSCAN_KSI_INT_EN_KSI_IN3_IEN    = 1,     /*!< IEN : KSI_IN3 falling edge detected                                       */
170 } MEC_KSCAN_KSI_INT_EN_KSI_IN3_Enum;
171 
172 /* =========================================  MEC_KSCAN KSI_INT_EN KSI_IN4 [4..4]  ========================================== */
173 typedef enum {                                  /*!< MEC_KSCAN_KSI_INT_EN_KSI_IN4                                             */
174   MEC_KSCAN_KSI_INT_EN_KSI_IN4_IEN    = 1,     /*!< IEN : KSI_IN4 falling edge detected                                       */
175 } MEC_KSCAN_KSI_INT_EN_KSI_IN4_Enum;
176 
177 /* =========================================  MEC_KSCAN KSI_INT_EN KSI_IN5 [5..5]  ========================================== */
178 typedef enum {                                  /*!< MEC_KSCAN_KSI_INT_EN_KSI_IN5                                             */
179   MEC_KSCAN_KSI_INT_EN_KSI_IN5_IEN    = 1,     /*!< IEN : KSI_IN5 falling edge detected                                       */
180 } MEC_KSCAN_KSI_INT_EN_KSI_IN5_Enum;
181 
182 /* =========================================  MEC_KSCAN KSI_INT_EN KSI_IN6 [6..6]  ========================================== */
183 typedef enum {                                  /*!< MEC_KSCAN_KSI_INT_EN_KSI_IN6                                             */
184   MEC_KSCAN_KSI_INT_EN_KSI_IN6_IEN    = 1,     /*!< IEN : KSI_IN6 falling edge detected                                       */
185 } MEC_KSCAN_KSI_INT_EN_KSI_IN6_Enum;
186 
187 /* =========================================  MEC_KSCAN KSI_INT_EN KSI_IN7 [7..7]  ========================================== */
188 typedef enum {                                  /*!< MEC_KSCAN_KSI_INT_EN_KSI_IN7                                             */
189   MEC_KSCAN_KSI_INT_EN_KSI_IN7_IEN    = 1,     /*!< IEN : KSI_IN7 falling edge detected                                       */
190 } MEC_KSCAN_KSI_INT_EN_KSI_IN7_Enum;
191 
192 /* =======================================================  EXT_CTRL  ======================================================== */
193 /* ==========================================  MEC_KSCAN EXT_CTRL PREDRIVE [0..0]  ========================================== */
194 typedef enum {                                  /*!< MEC_KSCAN_EXT_CTRL_PREDRIVE                                              */
195   MEC_KSCAN_EXT_CTRL_PREDRIVE_EN      = 1,     /*!< EN : Enable KSO pre-drive                                                 */
196 } MEC_KSCAN_EXT_CTRL_PREDRIVE_Enum;
197 
198 /** @} */ /* End of group EnumValue_peripherals */
199 
200 #endif /* _MEC5_KSCAN_V1_H */
201