1 /***************************************************************************//**
2 * \file cyhal_hwmgr_impl_part.h
3 *
4 * \brief
5 * Provides device specific information to the hardware manager. This file must
6 * only ever be included by cyhal_hwmgr.c.
7 *
8 ********************************************************************************
9 * \copyright
10 * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or
11 * an affiliate of Cypress Semiconductor Corporation
12 *
13 * SPDX-License-Identifier: Apache-2.0
14 *
15 * Licensed under the Apache License, Version 2.0 (the "License");
16 * you may not use this file except in compliance with the License.
17 * You may obtain a copy of the License at
18 *
19 * http://www.apache.org/licenses/LICENSE-2.0
20 *
21 * Unless required by applicable law or agreed to in writing, software
22 * distributed under the License is distributed on an "AS IS" BASIS,
23 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24 * See the License for the specific language governing permissions and
25 * limitations under the License.
26 *******************************************************************************/
27
28 /*******************************************************************************
29 * Defines
30 *******************************************************************************/
31
32 #include "cyhal_hwmgr_impl.h"
33 #include "cyhal_interconnect.h"
34 #include "cyhal_scb_common.h"
35
36 #if defined(CY_IP_MXS40PASS_SAR_INSTANCES)
37 #define CY_BLOCK_COUNT_ADC (CY_IP_MXS40PASS_SAR_INSTANCES)
38 #elif defined (CY_IP_MXS40EPASS_ESAR_INSTANCES)
39 #define CY_BLOCK_COUNT_ADC (CY_IP_MXS40EPASS_ESAR_INSTANCES)
40 #elif defined (CY_IP_M0S8PASS4A_SAR_INSTANCES)
41 #define CY_BLOCK_COUNT_ADC (CY_IP_M0S8PASS4A_SAR_INSTANCES)
42 #else
43 #define CY_BLOCK_COUNT_ADC (0)
44 #endif
45
46 #if defined(CY_IP_MXS40ADCMIC_INSTANCES)
47 #define CY_BLOCK_COUNT_ADCMIC (CY_IP_MXS40ADCMIC_INSTANCES)
48 #else
49 #define CY_BLOCK_COUNT_ADCMIC (0)
50 #endif
51
52 #if defined(CY_IP_MXBLESS_INSTANCES)
53 #define CY_BLOCK_COUNT_BLE CY_IP_MXBLESS_INSTANCES
54 #else
55 #define CY_BLOCK_COUNT_BLE (0)
56 #endif
57
58 #if defined(CY_IP_MXTTCANFD_INSTANCES)
59 #define CY_BLOCK_COUNT_CAN (CY_IP_MXTTCANFD_INSTANCES)
60 #if (CY_IP_MXTTCANFD_INSTANCES == 0)
61 #define CY_CHANNEL_COUNT_CAN (0u)
62 #elif (CY_IP_MXTTCANFD_INSTANCES == 1)
63 #define CY_CHANNEL_COUNT_CAN (CANFD_CAN_NR)
64 #elif (CY_IP_MXTTCANFD_INSTANCES == 2)
65 #define CY_CHANNEL_COUNT_CAN (CANFD0_CAN_NR + CANFD1_CAN_NR)
66 #elif (CY_IP_MXTTCANFD_INSTANCES == 3)
67 #define CY_CHANNEL_COUNT_CAN (CANFD0_CAN_NR + CANFD1_CAN_NR + CANFD2_CAN_NR)
68 #elif (CY_IP_MXTTCANFD_INSTANCES == 4)
69 #define CY_CHANNEL_COUNT_CAN (CANFD0_CAN_NR + CANFD1_CAN_NR + CANFD2_CAN_NR + CANFD3_CAN_NR)
70 #elif (CY_IP_MXTTCANFD_INSTANCES == 5)
71 #define CY_CHANNEL_COUNT_CAN (CANFD0_CAN_NR + CANFD1_CAN_NR + CANFD2_CAN_NR + CANFD3_CAN_NR + CANFD4_CAN_NR)
72 #elif (CY_IP_MXTTCANFD_INSTANCES == 6)
73 #define CY_CHANNEL_COUNT_CAN (CANFD0_CAN_NR + CANFD1_CAN_NR + CANFD2_CAN_NR + CANFD3_CAN_NR + CANFD4_CAN_NR + CANFD5_CAN_NR)
74 #elif (CY_IP_MXTTCANFD_INSTANCES == 7)
75 #define CY_CHANNEL_COUNT_CAN (CANFD0_CAN_NR + CANFD1_CAN_NR + CANFD2_CAN_NR + CANFD3_CAN_NR + CANFD4_CAN_NR + CANFD5_CAN_NR + CANFD6_CAN_NR)
76 #elif (CY_IP_MXTTCANFD_INSTANCES == 8)
77 #define CY_CHANNEL_COUNT_CAN (CANFD0_CAN_NR + CANFD1_CAN_NR + CANFD2_CAN_NR + CANFD3_CAN_NR + CANFD4_CAN_NR + CANFD5_CAN_NR + CANFD6_CAN_NR + CANFD7_CAN_NR)
78 #elif (CY_IP_MXTTCANFD_INSTANCES == 9)
79 #define CY_CHANNEL_COUNT_CAN (CANFD0_CAN_NR + CANFD1_CAN_NR + CANFD2_CAN_NR + CANFD3_CAN_NR + CANFD4_CAN_NR + CANFD5_CAN_NR + CANFD6_CAN_NR + CANFD7_CAN_NR + CANFD8_CAN_NR)
80 #elif (CY_IP_MXTTCANFD_INSTANCES == 10)
81 #define CY_CHANNEL_COUNT_CAN (CANFD0_CAN_NR + CANFD1_CAN_NR + CANFD2_CAN_NR + CANFD3_CAN_NR + CANFD4_CAN_NR + CANFD5_CAN_NR + CANFD6_CAN_NR + CANFD7_CAN_NR + CANFD8_CAN_NR + CANFD9_CAN_NR)
82 #elif (CY_IP_MXTTCANFD_INSTANCES > 10)
83 #warning Unhandled CAN instance count
84 #endif
85 #elif defined(CY_IP_M0S8CAN_INSTANCES)
86 #define CY_BLOCK_COUNT_CAN (CY_IP_M0S8CAN_INSTANCES)
87 #define CY_CHANNEL_COUNT_CAN (1)
88 #else
89 #define CY_BLOCK_COUNT_CAN (0)
90 #define CY_CHANNEL_COUNT_CAN (0)
91 #endif
92
93 #if defined(COMPONENT_CAT1A)
94 #define PERI_DIV_NR (PERI_DIV_8_NR + PERI_DIV_16_NR + PERI_DIV_16_5_NR + PERI_DIV_24_5_NR)
95 #elif defined(COMPONENT_CAT1B) || defined(COMPONENT_CAT1C)
96 #if (_CYHAL_CLOCK_PERI_GROUPS == 0)
97 #define PERI_DIV_NR (0)
98 #elif (_CYHAL_CLOCK_PERI_GROUPS == 1)
99 #define PERI_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0))
100 #elif (_CYHAL_CLOCK_PERI_GROUPS) == 2
101 #define PERI_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1))
102 #elif (_CYHAL_CLOCK_PERI_GROUPS) == 3
103 #define PERI_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2))
104 #elif (_CYHAL_CLOCK_PERI_GROUPS) == 4
105 #define PERI_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3))
106 #elif (_CYHAL_CLOCK_PERI_GROUPS) == 5
107 #define PERI_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4))
108 #elif (_CYHAL_CLOCK_PERI_GROUPS) == 6
109 #define PERI_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5))
110 #elif (_CYHAL_CLOCK_PERI_GROUPS) == 7
111 #define PERI_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6))
112 #elif (_CYHAL_CLOCK_PERI_GROUPS) == 8
113 #define PERI_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7))
114 #elif (_CYHAL_CLOCK_PERI_GROUPS) == 9
115 #define PERI_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8))
116 #elif (_CYHAL_CLOCK_PERI_GROUPS) == 10
117 #define PERI_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9))
118 #elif (_CYHAL_CLOCK_PERI_GROUPS) == 11
119 #define PERI_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9) + CY_MXSPERI_PCLK_DIV_CNT(10))
120 #elif (_CYHAL_CLOCK_PERI_GROUPS) == 12
121 #define PERI_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9) + CY_MXSPERI_PCLK_DIV_CNT(10) + CY_MXSPERI_PCLK_DIV_CNT(11))
122 #elif (_CYHAL_CLOCK_PERI_GROUPS) == 13
123 #define PERI_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9) + CY_MXSPERI_PCLK_DIV_CNT(10) + CY_MXSPERI_PCLK_DIV_CNT(11) + CY_MXSPERI_PCLK_DIV_CNT(12))
124 #elif (_CYHAL_CLOCK_PERI_GROUPS) == 14
125 #define PERI_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9) + CY_MXSPERI_PCLK_DIV_CNT(10) + CY_MXSPERI_PCLK_DIV_CNT(11) + CY_MXSPERI_PCLK_DIV_CNT(12) + CY_MXSPERI_PCLK_DIV_CNT(13))
126 #elif (_CYHAL_CLOCK_PERI_GROUPS) == 15
127 #define PERI_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9) + CY_MXSPERI_PCLK_DIV_CNT(10) + CY_MXSPERI_PCLK_DIV_CNT(11) + CY_MXSPERI_PCLK_DIV_CNT(12) + CY_MXSPERI_PCLK_DIV_CNT(13) + CY_MXSPERI_PCLK_DIV_CNT(14))
128 #else
129 #warning "PCLK table size exceeded"
130 #endif
131 #elif defined (COMPONENT_CAT1D)
132 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR == 0)
133 #define PERI0_DIV_NR (0)
134 #elif (PERI0_PERI_PCLK_PCLK_GROUP_NR == 1)
135 #define PERI0_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0, 0))
136 #elif (PERI0_PERI_PCLK_PCLK_GROUP_NR == 2)
137 #define PERI0_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1))
138 #elif (PERI0_PERI_PCLK_PCLK_GROUP_NR == 3)
139 #define PERI0_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1) + CY_MXSPERI_PCLK_DIV_CNT(0, 2))
140 #elif (PERI0_PERI_PCLK_PCLK_GROUP_NR == 4)
141 #define PERI0_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1) + CY_MXSPERI_PCLK_DIV_CNT(0, 2) + CY_MXSPERI_PCLK_DIV_CNT(0, 3))
142 #elif (PERI0_PERI_PCLK_PCLK_GROUP_NR == 5)
143 #define PERI0_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1) + CY_MXSPERI_PCLK_DIV_CNT(0, 2) + CY_MXSPERI_PCLK_DIV_CNT(0, 3) + CY_MXSPERI_PCLK_DIV_CNT(0, 4))
144 #elif (PERI0_PERI_PCLK_PCLK_GROUP_NR == 6)
145 #define PERI0_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1) + CY_MXSPERI_PCLK_DIV_CNT(0, 2) + CY_MXSPERI_PCLK_DIV_CNT(0, 3) + CY_MXSPERI_PCLK_DIV_CNT(0, 4) + CY_MXSPERI_PCLK_DIV_CNT(0, 5))
146 #elif (PERI0_PERI_PCLK_PCLK_GROUP_NR == 7)
147 #define PERI0_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1) + CY_MXSPERI_PCLK_DIV_CNT(0, 2) + CY_MXSPERI_PCLK_DIV_CNT(0, 3) + CY_MXSPERI_PCLK_DIV_CNT(0, 4) + CY_MXSPERI_PCLK_DIV_CNT(0, 5) + CY_MXSPERI_PCLK_DIV_CNT(0, 6))
148 #elif (PERI0_PERI_PCLK_PCLK_GROUP_NR == 8)
149 #define PERI0_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1) + CY_MXSPERI_PCLK_DIV_CNT(0, 2) + CY_MXSPERI_PCLK_DIV_CNT(0, 3) + CY_MXSPERI_PCLK_DIV_CNT(0, 4) + CY_MXSPERI_PCLK_DIV_CNT(0, 5) + CY_MXSPERI_PCLK_DIV_CNT(0, 6) + CY_MXSPERI_PCLK_DIV_CNT(0, 7))
150 #elif (PERI0_PERI_PCLK_PCLK_GROUP_NR == 9)
151 #define PERI0_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1) + CY_MXSPERI_PCLK_DIV_CNT(0, 2) + CY_MXSPERI_PCLK_DIV_CNT(0, 3) + CY_MXSPERI_PCLK_DIV_CNT(0, 4) + CY_MXSPERI_PCLK_DIV_CNT(0, 5) + CY_MXSPERI_PCLK_DIV_CNT(0, 6) + CY_MXSPERI_PCLK_DIV_CNT(0, 7) + CY_MXSPERI_PCLK_DIV_CNT(0, 8))
152 #elif (PERI0_PERI_PCLK_PCLK_GROUP_NR == 10)
153 #define PERI0_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1) + CY_MXSPERI_PCLK_DIV_CNT(0, 2) + CY_MXSPERI_PCLK_DIV_CNT(0, 3) + CY_MXSPERI_PCLK_DIV_CNT(0, 4) + CY_MXSPERI_PCLK_DIV_CNT(0, 5) + CY_MXSPERI_PCLK_DIV_CNT(0, 6) + CY_MXSPERI_PCLK_DIV_CNT(0, 7) + CY_MXSPERI_PCLK_DIV_CNT(0, 8) + CY_MXSPERI_PCLK_DIV_CNT(0, 9))
154 #elif (PERI0_PERI_PCLK_PCLK_GROUP_NR > 10)
155 #error "Unhandled PERI0_PERI_PCLK_PCLK_GROUP_NR"
156 #endif /* multiple PERI0_PERI_PCLK_PCLK_GROUP_NR values */
157
158 #if (PERI1_PERI_PCLK_PCLK_GROUP_NR == 0)
159 #define PERI1_DIV_NR (0)
160 #elif (PERI1_PERI_PCLK_PCLK_GROUP_NR == 1)
161 #define PERI1_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(1, 0))
162 #elif (PERI1_PERI_PCLK_PCLK_GROUP_NR == 2)
163 #define PERI1_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(1, 0) + CY_MXSPERI_PCLK_DIV_CNT(1, 1))
164 #elif (PERI1_PERI_PCLK_PCLK_GROUP_NR == 3)
165 #define PERI1_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(1, 0) + CY_MXSPERI_PCLK_DIV_CNT(1, 1) + CY_MXSPERI_PCLK_DIV_CNT(1, 2))
166 #elif (PERI1_PERI_PCLK_PCLK_GROUP_NR == 4)
167 #define PERI1_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(1, 0) + CY_MXSPERI_PCLK_DIV_CNT(1, 1) + CY_MXSPERI_PCLK_DIV_CNT(1, 2) + CY_MXSPERI_PCLK_DIV_CNT(1, 3))
168 #elif (PERI1_PERI_PCLK_PCLK_GROUP_NR == 5)
169 #define PERI1_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(1, 0) + CY_MXSPERI_PCLK_DIV_CNT(1, 1) + CY_MXSPERI_PCLK_DIV_CNT(1, 2) + CY_MXSPERI_PCLK_DIV_CNT(1, 3) + CY_MXSPERI_PCLK_DIV_CNT(1, 4))
170 #elif (PERI1_PERI_PCLK_PCLK_GROUP_NR == 6)
171 #define PERI1_DIV_NR (CY_MXSPERI_PCLK_DIV_CNT(1, 0) + CY_MXSPERI_PCLK_DIV_CNT(1, 1) + CY_MXSPERI_PCLK_DIV_CNT(1, 2) + CY_MXSPERI_PCLK_DIV_CNT(1, 3) + CY_MXSPERI_PCLK_DIV_CNT(1, 4) + CY_MXSPERI_PCLK_DIV_CNT(1, 5))
172 #elif (PERI1_PERI_PCLK_PCLK_GROUP_NR > 6)
173 #error "Unhandled PERI1_PERI_PCLK_PCLK_GROUP_NR"
174 #endif /* multiple PERI1_PERI_PCLK_PCLK_GROUP_NR values */
175
176 #define PERI_DIV_NR (PERI0_DIV_NR + PERI1_DIV_NR)
177 #endif
178
179 #if (defined(COMPONENT_CAT1A) && !(defined(SRSS_HT_VARIANT) && (SRSS_HT_VARIANT > 0)))
180 // 12 dedicated = IMO, EXT, ILO, FLL, LF, Pump, BAK, Timer, AltSysTick, Slow, Fast, Peri
181 // 7 optional = ECO, ALTHF, ALTLF, PILO, WCO, MFO, MF
182 #define CY_CHANNEL_COUNT_CLOCK (12 + 7 + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + SRSS_NUM_HFROOT + PERI_DIV_NR)
183 #elif (defined(COMPONENT_CAT1A) && defined(SRSS_HT_VARIANT) && (SRSS_HT_VARIANT > 0))
184 // 13 dedicated = IMO, EXT, ILO0, ILO1, FLL, LF, Pump, BAK, Timer, AltSysTick, Slow, Fast, Peri
185 // 6 optional = ECO, ALTHF, ALTLF, WCO, MFO, MF
186 #define CY_CHANNEL_COUNT_CLOCK (13 + 6 + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + SRSS_NUM_HFROOT + PERI_DIV_NR)
187 #elif defined(COMPONENT_CAT1B)
188 // 10 dedicated = IHO, IMO, EXT, ILO, FLL, LF, Pump, BAK, AltSysTick, Peri
189 // 7 optional = ECO, ALTHF, ALTLF, PILO, WCO, MFO, MF
190 #define CY_CHANNEL_COUNT_CLOCK (10 + 7 + SRSS_NUM_CLKPATH + SRSS_NUM_PLL200M + SRSS_NUM_PLL400M + SRSS_NUM_HFROOT + PERI_DIV_NR)
191 // TODO : to be fixed
192 #elif defined(COMPONENT_CAT1C)
193 // 15 dedicated = IMO, EXT, ILO, IL01, FLL, LF, BAK, AltSysTick, Peri, Fast0, Fast1, Slow, Mem, Timer
194 // 2 optional = ECO, WCO
195 #define CY_CHANNEL_COUNT_CLOCK (14 + 2 + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + SRSS_NUM_PLL400M + SRSS_NUM_HFROOT + PERI_DIV_NR)
196 #elif defined(COMPONENT_CAT1D)
197 // 7 dedicated = IHO, EXT, FLL, LF, BAK, AltSysTick
198 // 6 optional = ECO, ALTHF, ALTLF, PILO, WCO, MF
199 #define CY_CHANNEL_COUNT_CLOCK (6 + 6 + SRSS_NUM_CLKPATH + SRSS_NUM_DPLL_LP + SRSS_NUM_DPLL_HP + SRSS_NUM_HFROOT + PERI_DIV_NR)
200 #elif defined(COMPONENT_CAT2)
201 // 7 dedicated = IMO, EXT, ILO, HF, LF, PUMP, SYSCLK
202 // 5 optional = ECO, WCO, PLL, PLLSEL, WDCSEL
203 #define CY_CHANNEL_COUNT_CLOCK (7 + 5 + PERI_PCLK_CLOCK_NR)
204 #endif
205
206 #if defined(CY_IP_MXCRYPTO_INSTANCES)
207 #define CY_BLOCK_COUNT_CRYPTO (CY_IP_MXCRYPTO_INSTANCES)
208 #elif defined(CY_IP_MXCRYPTOCELL_INSTANCES)
209 #define CY_BLOCK_COUNT_CRYPTO (CY_IP_MXCRYPTOCELL_INSTANCES)
210 #elif defined(CPUSS_CRYPTO_PRESENT)
211 #define CY_BLOCK_COUNT_CRYPTO (CPUSS_CRYPTO_PRESENT)
212 #elif defined(CY_IP_M0S8CRYPTO_INSTANCES)
213 #define CY_BLOCK_COUNT_CRYPTO (CY_IP_M0S8CRYPTO_INSTANCES)
214 #elif defined(CY_IP_M0S8CRYPTOLITE_INSTANCES)
215 #define CY_BLOCK_COUNT_CRYPTO (CY_IP_M0S8CRYPTOLITE_INSTANCES)
216 #else
217 #define CY_BLOCK_COUNT_CRYPTO (0)
218 #endif
219
220 #if defined(CY_IP_MXS40PASS_CTDAC_INSTANCES)
221 #define CY_BLOCK_COUNT_DAC (CY_IP_MXS40PASS_CTDAC_INSTANCES)
222 #else
223 #define CY_BLOCK_COUNT_DAC (0)
224 #endif
225
226 #if defined(CY_IP_M4CPUSS_DMAC_INSTANCES)
227 #define CY_BLOCK_COUNT_DMA (CY_IP_M4CPUSS_DMAC_INSTANCES)
228 #define CY_CHANNEL_COUNT_DMA (CPUSS_DMAC_CH_NR)
229 #elif defined(CY_IP_MXAHBDMAC_INSTANCES)
230 #define CY_BLOCK_COUNT_DMA (CY_IP_MXAHBDMAC_INSTANCES)
231
232 #if (CY_IP_MXAHBDMAC_INSTANCES == 0)
233 #define CY_CHANNEL_COUNT_DMA (0u)
234 #elif (CY_IP_MXAHBDMAC_INSTANCES == 1)
235 #define CY_CHANNEL_COUNT_DMA (MXAHBDMAC0_CH_NR)
236 #elif (CY_IP_MXAHBDMAC_INSTANCES == 2)
237 #define CY_CHANNEL_COUNT_DMA (MXAHBDMAC0_CH_NR + MXAHBDMAC1_CH_NR)
238 #elif (CY_IP_MXAHBDMAC_INSTANCES == 3)
239 #define CY_CHANNEL_COUNT_DMA (MXAHBDMAC0_CH_NR + MXAHBDMAC1_CH_NR + MXAHBDMAC2_CH_NR)
240 #else
241 #warning Unhandled DMA instance count
242 #endif
243 #elif defined(CY_IP_MXSAXIDMAC_INSTANCES)
244 #define CY_BLOCK_COUNT_DMA (CY_IP_MXSAXIDMAC_INSTANCES)
245 #if (APPCPUSS_AXIDMAC1_PRESENT)
246 #define CY_CHANNEL_COUNT_DMA (APPCPUSS_AXIDMAC0_CH_NR + APPCPUSS_AXIDMAC1_CH_NR)
247 #else
248 #define CY_CHANNEL_COUNT_DMA (APPCPUSS_AXIDMAC0_CH_NR)
249 #endif
250 #elif defined(CPUSS_CPUMEMSS_DMAC_PRESENT)
251 #define CY_BLOCK_COUNT_DMA (CPUSS_CPUMEMSS_DMAC_PRESENT)
252 #define CY_CHANNEL_COUNT_DMA (CPUSS_DMAC_CH_NR)
253 #elif defined(CPUSS_DMAC_PRESENT)
254 #define CY_BLOCK_COUNT_DMA (CPUSS_DMAC_PRESENT)
255 #define CY_CHANNEL_COUNT_DMA (CPUSS_DMAC_CH_NR)
256 #else
257 #define CY_BLOCK_COUNT_DMA (0)
258 #define CY_CHANNEL_COUNT_DMA (0)
259 #endif
260
261 #if defined(CY_IP_M4CPUSS_DMA_INSTANCES)
262 #define CY_BLOCK_COUNT_DW (CY_IP_M4CPUSS_DMA_INSTANCES)
263 #define CY_CHANNEL_COUNT_DW (CPUSS_DW0_CH_NR + CPUSS_DW1_CH_NR)
264 #elif defined(CY_IP_MXDW_INSTANCES) && (CPUSS_DW0_PRESENT == 1)
265 #define CY_BLOCK_COUNT_DW (CY_IP_MXDW_INSTANCES)
266 #if(CPUSS_DW1_PRESENT == 1)
267 #define CY_CHANNEL_COUNT_DW (CPUSS_DW0_CH_NR + CPUSS_DW1_CH_NR)
268 #else
269 #define CY_CHANNEL_COUNT_DW (CPUSS_DW0_CH_NR)
270 #endif
271 #elif defined(CPUSS_DW_NR)
272 #define CY_BLOCK_COUNT_DW (CPUSS_DW_NR)
273 #if (CPUSS_DW_NR == 0)
274 #define CY_CHANNEL_COUNT_DW (0)
275 #elif (CPUSS_DW_NR == 1)
276 #define CY_CHANNEL_COUNT_DW (CPUSS_DW0_CH_NR)
277 #elif (CPUSS_DW_NR == 2)
278 #define CY_CHANNEL_COUNT_DW (CPUSS_DW0_CH_NR + CPUSS_DW1_CH_NR)
279 #else
280 #warning "Unhandled number of DataWire controllers."
281 #endif /* CPUSS_DW_NR is 0, 1, 2, or other (unhandled) */
282 #else
283 #define CY_BLOCK_COUNT_DW (0)
284 #define CY_CHANNEL_COUNT_DW (0)
285 #endif
286
287 #ifdef CY_IP_MXETH_INSTANCES
288 #define CY_BLOCK_COUNT_ETH (CY_IP_MXETH_INSTANCES)
289 #else
290 #define CY_BLOCK_COUNT_ETH (0)
291 #endif
292
293 #if defined(IOSS_GPIO_GPIO_PORT_NR)
294 #define CY_BLOCK_COUNT_GPIO (IOSS_GPIO_GPIO_PORT_NR)
295 #define CY_CHANNEL_COUNT_GPIO (8 * IOSS_GPIO_GPIO_PORT_NR)
296 #else
297 #define CY_BLOCK_COUNT_GPIO (0)
298 #define CY_CHANNEL_COUNT_GPIO (0)
299 #endif
300
301 #if defined(CY_IP_MXAUDIOSS_INSTANCES)
302 #define CY_BLOCK_COUNT_I2S (CY_IP_MXAUDIOSS_INSTANCES)
303 #else
304 #define CY_BLOCK_COUNT_I2S (0)
305 #endif
306
307 #ifdef CY_IP_MXI3C_INSTANCES
308 #define CY_BLOCK_COUNT_I3C (CY_IP_MXI3C_INSTANCES)
309 #else
310 #define CY_BLOCK_COUNT_I3C (0)
311 #endif
312
313 #if defined(CY_IP_MXKEYSCAN_INSTANCES)
314 #define CY_BLOCK_COUNT_KEYSCAN (CY_IP_MXKEYSCAN_INSTANCES)
315 #else
316 #define CY_BLOCK_COUNT_KEYSCAN (0)
317 #endif
318
319 #if defined(CY_IP_MXLCD_INSTANCES)
320 #define CY_BLOCK_COUNT_LCD (CY_IP_MXLCD_INSTANCES)
321 #elif defined(CY_IP_M0S8LCD_INSTANCES)
322 #define CY_BLOCK_COUNT_LCD (CY_IP_M0S8LCD_INSTANCES)
323 #else
324 #define CY_BLOCK_COUNT_LCD (0)
325 #endif
326
327 #if defined(CY_IP_MXLIN_INSTANCES)
328 #define CY_BLOCK_COUNT_LIN (CY_IP_MXLIN_INSTANCES)
329 #else
330 #define CY_BLOCK_COUNT_LIN (0)
331 #endif
332
333 #if defined(CY_IP_MXLPCOMP_INSTANCES)
334 #define CY_BLOCK_COUNT_LPCOMP (CY_IP_MXLPCOMP_INSTANCES)
335 #elif defined(CY_IP_M0S8LPCOMP_INSTANCES)
336 #define CY_BLOCK_COUNT_LPCOMP (CY_IP_M0S8LPCOMP_INSTANCES)
337 #else
338 #define CY_BLOCK_COUNT_LPCOMP (0)
339 #endif
340 #define CY_CHANNEL_COUNT_LPCOMP (2 * CY_BLOCK_COUNT_LPCOMP)
341
342 #if defined(PASS_NR_CTBS)
343 #define CY_BLOCK_COUNT_OPAMP (PASS_NR_CTBS)
344 #elif defined(PASS0_NR_CTBS)
345 #if defined(PASS1_NR_CTBS)
346 #define CY_BLOCK_COUNT_OPAMP ((PASS0_NR_CTBS + PASS1_NR_CTBS))
347 #else
348 #define CY_BLOCK_COUNT_OPAMP (PASS0_NR_CTBS)
349 #endif
350 #else
351 #define CY_BLOCK_COUNT_OPAMP (0)
352 #endif
353 #define CY_CHANNEL_COUNT_OPAMP (2 * CY_BLOCK_COUNT_OPAMP)
354
355 #if defined(CY_IP_MXAUDIOSS_INSTANCES)
356 #define CY_BLOCK_COUNT_PDMPCM (CY_IP_MXAUDIOSS_INSTANCES)
357 #elif defined(CY_IP_MXPDM_INSTANCES)
358 #define CY_BLOCK_COUNT_PDMPCM (CY_IP_MXPDM_INSTANCES)
359 #else
360 #define CY_BLOCK_COUNT_PDMPCM (0)
361 #endif
362
363 #if defined(CY_IP_MXSMIF_INSTANCES)
364 #define CY_BLOCK_COUNT_QSPI (CY_IP_MXSMIF_INSTANCES)
365 #else
366 #define CY_BLOCK_COUNT_QSPI (0)
367 #endif
368
369 #if (defined(CY_IP_MXS40SSRSS) || defined(CY_IP_MXS40SRSS)) && SRSS_BACKUP_PRESENT
370 #define CY_BLOCK_COUNT_RTC (1)
371 #else
372 #define CY_BLOCK_COUNT_RTC (0)
373 #endif
374
375 #if defined(CY_IP_MXSCB_INSTANCES)|| defined(CY_IP_MXS22SCB_INSTANCES) || defined(CY_IP_M0S8SCB_INSTANCES)
376 #define CY_BLOCK_COUNT_SCB (_SCB_ARRAY_SIZE)
377 #else
378 #define CY_BLOCK_COUNT_SCB (0)
379 #endif
380
381 #if defined(CY_IP_MXSDHC_INSTANCES)
382 #define CY_BLOCK_COUNT_SDHC (CY_IP_MXSDHC_INSTANCES)
383 #else
384 #define CY_BLOCK_COUNT_SDHC (0)
385 #endif
386
387 #ifdef CY_IP_MXSDIODEV_INSTANCES
388 #define CY_BLOCK_COUNT_SDIODEV (CY_IP_MXSDIODEV_INSTANCES)
389 #else
390 #define CY_BLOCK_COUNT_SDIODEV (0)
391 #endif
392
393 #if defined(CY_IP_MXTCPWM_INSTANCES)
394 #define CY_BLOCK_COUNT_TCPWM CY_IP_MXTCPWM_INSTANCES
395 #if (CY_IP_MXTCPWM_VERSION == 1)
396 #if (CY_IP_MXTCPWM_INSTANCES == 0)
397 #define CY_CHANNEL_COUNT_TCPWM (0u)
398 #elif (CY_IP_MXTCPWM_INSTANCES == 1)
399 #define CY_CHANNEL_COUNT_TCPWM (TCPWM0_CNT_NR)
400 #elif (CY_IP_MXTCPWM_INSTANCES == 2)
401 #define CY_CHANNEL_COUNT_TCPWM (TCPWM0_CNT_NR + TCPWM1_CNT_NR)
402 #elif (CY_IP_MXTCPWM_INSTANCES == 3)
403 #define CY_CHANNEL_COUNT_TCPWM (TCPWM0_CNT_NR + TCPWM1_CNT_NR + TCPWM2_CNT_NR)
404 #elif (CY_IP_MXTCPWM_INSTANCES == 4)
405 #define CY_CHANNEL_COUNT_TCPWM (TCPWM0_CNT_NR + TCPWM1_CNT_NR + TCPWM2_CNT_NR + TCPWM3_CNT_NR)
406 #elif (CY_IP_MXTCPWM_INSTANCES == 5)
407 #define CY_CHANNEL_COUNT_TCPWM (TCPWM0_CNT_NR + TCPWM1_CNT_NR + TCPWM2_CNT_NR + TCPWM3_CNT_NR + TCPWM4_CNT_NR)
408 #elif (CY_IP_MXTCPWM_INSTANCES == 6)
409 #define CY_CHANNEL_COUNT_TCPWM (TCPWM0_CNT_NR + TCPWM1_CNT_NR + TCPWM2_CNT_NR + TCPWM3_CNT_NR + TCPWM4_CNT_NR + TCPWM5_CNT_NR)
410 #elif (CY_IP_MXTCPWM_INSTANCES == 7)
411 #define CY_CHANNEL_COUNT_TCPWM (TCPWM0_CNT_NR + TCPWM1_CNT_NR + TCPWM2_CNT_NR + TCPWM3_CNT_NR + TCPWM4_CNT_NR + TCPWM5_CNT_NR + TCPWM6_CNT_NR)
412 #elif (CY_IP_MXTCPWM_INSTANCES == 8)
413 #define CY_CHANNEL_COUNT_TCPWM (TCPWM0_CNT_NR + TCPWM1_CNT_NR + TCPWM2_CNT_NR + TCPWM3_CNT_NR + TCPWM4_CNT_NR + TCPWM5_CNT_NR + TCPWM6_CNT_NR + TCPWM7_CNT_NR)
414 #elif (CY_IP_MXTCPWM_INSTANCES == 9)
415 #define CY_CHANNEL_COUNT_TCPWM (TCPWM0_CNT_NR + TCPWM1_CNT_NR + TCPWM2_CNT_NR + TCPWM3_CNT_NR + TCPWM4_CNT_NR + TCPWM5_CNT_NR + TCPWM6_CNT_NR + TCPWM7_CNT_NR + TCPWM8_CNT_NR)
416 #elif (CY_IP_MXTCPWM_INSTANCES == 10)
417 #define CY_CHANNEL_COUNT_TCPWM (TCPWM0_CNT_NR + TCPWM1_CNT_NR + TCPWM2_CNT_NR + TCPWM3_CNT_NR + TCPWM4_CNT_NR + TCPWM5_CNT_NR + TCPWM6_CNT_NR + TCPWM7_CNT_NR + TCPWM8_CNT_NR + TCPWM9_CNT_NR)
418 #elif (CY_IP_MXTCPWM_INSTANCES > 10)
419 #warning Unhandled TCPWM instance count
420 #endif
421 #elif (CY_IP_MXTCPWM_VERSION == 2)
422 #if (CY_IP_MXTCPWM_INSTANCES == 1)
423 #if (TCPWM_GRP_NR == 0)
424 #define CY_CHANNEL_COUNT_TCPWM (0u)
425 #elif (TCPWM_GRP_NR == 1)
426 #define CY_CHANNEL_COUNT_TCPWM (TCPWM_GRP_NR0_GRP_GRP_CNT_NR)
427 #elif (TCPWM_GRP_NR == 2)
428 #define CY_CHANNEL_COUNT_TCPWM (TCPWM_GRP_NR0_GRP_GRP_CNT_NR + TCPWM_GRP_NR1_GRP_GRP_CNT_NR)
429 #elif (TCPWM_GRP_NR == 3)
430 #define CY_CHANNEL_COUNT_TCPWM (TCPWM_GRP_NR0_GRP_GRP_CNT_NR + TCPWM_GRP_NR1_GRP_GRP_CNT_NR + TCPWM_GRP_NR2_GRP_GRP_CNT_NR)
431 #elif (TCPWM_GRP_NR == 4)
432 #define CY_CHANNEL_COUNT_TCPWM (TCPWM_GRP_NR0_GRP_GRP_CNT_NR + TCPWM_GRP_NR1_GRP_GRP_CNT_NR + TCPWM_GRP_NR2_GRP_GRP_CNT_NR + TCPWM_GRP_NR3_GRP_GRP_CNT_NR)
433 #elif (TCPWM_GRP_NR > 4)
434 #warning Unhandled TCPWM instance count
435 #endif
436 #elif (CY_IP_MXTCPWM_INSTANCES == 2)
437 #if (TCPWM0_GRP_NR == 0)
438 #define CY_CHANNEL_COUNT_TCPWM0 (0u)
439 #elif (TCPWM0_GRP_NR == 1)
440 #define CY_CHANNEL_COUNT_TCPWM0 (TCPWM0_GRP_NR0_GRP_GRP_CNT_NR)
441 #elif (TCPWM0_GRP_NR == 2)
442 #define CY_CHANNEL_COUNT_TCPWM0 (TCPWM0_GRP_NR0_GRP_GRP_CNT_NR + TCPWM0_GRP_NR1_GRP_GRP_CNT_NR)
443 #elif (TCPWM0_GRP_NR == 3)
444 #define CY_CHANNEL_COUNT_TCPWM0 (TCPWM0_GRP_NR0_GRP_GRP_CNT_NR + TCPWM0_GRP_NR1_GRP_GRP_CNT_NR + TCPWM0_GRP_NR2_GRP_GRP_CNT_NR)
445 #elif (TCPWM0_GRP_NR > 3)
446 #warning Unhandled TCPWM instance count
447 #endif
448 #if (TCPWM1_GRP_NR == 0)
449 #define CY_CHANNEL_COUNT_TCPWM1 (0u)
450 #elif (TCPWM1_GRP_NR == 1)
451 #define CY_CHANNEL_COUNT_TCPWM1 (TCPWM1_GRP_NR0_GRP_GRP_CNT_NR)
452 #elif (TCPWM1_GRP_NR == 2)
453 #define CY_CHANNEL_COUNT_TCPWM1 (TCPWM1_GRP_NR0_GRP_GRP_CNT_NR + TCPWM1_GRP_NR1_GRP_GRP_CNT_NR)
454 #elif (TCPWM1_GRP_NR == 3)
455 #define CY_CHANNEL_COUNT_TCPWM1 (TCPWM1_GRP_NR0_GRP_GRP_CNT_NR + TCPWM1_GRP_NR1_GRP_GRP_CNT_NR + TCPWM1_GRP_NR2_GRP_GRP_CNT_NR)
456 #elif (TCPWM1_GRP_NR > 3)
457 #warning Unhandled TCPWM instance count
458 #endif
459 #define CY_CHANNEL_COUNT_TCPWM (CY_CHANNEL_COUNT_TCPWM0 + CY_CHANNEL_COUNT_TCPWM1)
460 #elif (CY_IP_MXTCPWM_INSTANCES > 2)
461 #warning Unhandled TCPWM instance count
462 #endif
463 #else
464 #warning Unrecognized TCPWM IP version
465 #endif
466 #elif defined(CY_IP_M0S8TCPWM_INSTANCES)
467 #define CY_BLOCK_COUNT_TCPWM (CY_IP_M0S8TCPWM_INSTANCES)
468 #if (CY_IP_M0S8TCPWM_INSTANCES == 0)
469 #define CY_CHANNEL_COUNT_TCPWM (0u)
470 #elif (CY_IP_M0S8TCPWM_INSTANCES == 1)
471 #define CY_CHANNEL_COUNT_TCPWM (TCPWM_CNT_NR)
472 #else
473 #warning Unhandled TCPWM instance count
474 #endif
475 #else
476 #define CY_BLOCK_COUNT_TCPWM (0)
477 #define CY_CHANNEL_COUNT_TCPWM (0)
478 #endif
479
480 #ifdef CY_IP_MXTDM_INSTANCES
481 #define CY_BLOCK_COUNT_TDM (CY_IP_MXTDM_INSTANCES)
482 #if (CY_IP_MXTDM_INSTANCES == 0)
483 #define CY_CHANNEL_COUNT_TDM (0u)
484 #elif (CY_IP_MXTDM_INSTANCES == 1)
485 #define CY_CHANNEL_COUNT_TDM (TDM_NR)
486 #else
487 #warning Unhandled TDM instance count
488 #endif
489 #else
490 #define CY_BLOCK_COUNT_TDM (0)
491 #define CY_CHANNEL_COUNT_TDM (0u)
492 #endif
493
494 #if defined(CY_IP_MXUDB_INSTANCES)
495 #define CY_BLOCK_COUNT_UDB (CY_IP_MXUDB_INSTANCES)
496 #else
497 #define CY_BLOCK_COUNT_UDB (0)
498 #endif
499
500 #if defined(CY_IP_MXUSBFS_INSTANCES)
501 #define CY_BLOCK_COUNT_USB (CY_IP_MXUSBFS_INSTANCES)
502 #else
503 #define CY_BLOCK_COUNT_USB (0)
504 #endif
505
506 #if defined(CY_IP_MXUSBPD_INSTANCES)
507 #define CY_BLOCK_COUNT_USBPD CY_IP_MXUSBPD_INSTANCES
508 #else
509 #define CY_BLOCK_COUNT_USBPD (0)
510 #endif
511
512 #if defined(CY_IP_MXS40SRSS) || defined(CY_IP_MXS40SSRSS) || defined(CY_IP_MXS22SRSS)
513 #define CY_BLOCK_COUNT_MCWDT (SRSS_NUM_MCWDT)
514 #elif (defined(CY_IP_S8SRSSLT_INSTANCES) && defined(CY_IP_M0S8WCO))
515 #define CY_BLOCK_COUNT_MCWDT (CY_IP_M0S8WCO_INSTANCES)
516 #else
517 #define CY_BLOCK_COUNT_MCWDT (0)
518 #endif
519
520 #if (defined(CY_IP_MXTCPWM_INSTANCES) && (CY_IP_MXTCPWM_VERSION >= 2) && (CY_IP_MXTCPWM_INSTANCES == 2))
521 #if (TCPWM0_GRP_NR > 3)
522 #define _CYHAL_TCPWM0_TOTAL_CNT_NR (TCPWM0_GRP_NR0_GRP_GRP_CNT_NR + TCPWM0_GRP_NR1_GRP_GRP_CNT_NR + TCPWM0_GRP_NR2_GRP_GRP_CNT_NR + TCPWM0_GRP_NR3_GRP_GRP_CNT_NR)
523 #elif (TCPWM0_GRP_NR > 2)
524 #define _CYHAL_TCPWM0_TOTAL_CNT_NR (TCPWM0_GRP_NR0_GRP_GRP_CNT_NR + TCPWM0_GRP_NR1_GRP_GRP_CNT_NR + TCPWM0_GRP_NR2_GRP_GRP_CNT_NR)
525 #elif (TCPWM0_GRP_NR > 1)
526 #define _CYHAL_TCPWM0_TOTAL_CNT_NR (TCPWM0_GRP_NR0_GRP_GRP_CNT_NR + TCPWM0_GRP_NR1_GRP_GRP_CNT_NR)
527 #elif (TCPWM0_GRP_NR > 0)
528 #define _CYHAL_TCPWM0_TOTAL_CNT_NR (TCPWM0_GRP_NR0_GRP_GRP_CNT_NR)
529 #endif
530 #if (TCPWM1_GRP_NR > 3)
531 #define _CYHAL_TCPWM1_TOTAL_CNT_NR (TCPWM1_GRP_NR0_GRP_GRP_CNT_NR + TCPWM1_GRP_NR1_GRP_GRP_CNT_NR + TCPWM1_GRP_NR2_GRP_GRP_CNT_NR + TCPWM1_GRP_NR3_GRP_GRP_CNT_NR)
532 #elif (TCPWM1_GRP_NR > 2)
533 #define _CYHAL_TCPWM1_TOTAL_CNT_NR (TCPWM1_GRP_NR0_GRP_GRP_CNT_NR + TCPWM1_GRP_NR1_GRP_GRP_CNT_NR + TCPWM1_GRP_NR2_GRP_GRP_CNT_NR)
534 #elif (TCPWM1_GRP_NR > 1)
535 #define _CYHAL_TCPWM1_TOTAL_CNT_NR (TCPWM1_GRP_NR0_GRP_GRP_CNT_NR + TCPWM1_GRP_NR1_GRP_GRP_CNT_NR)
536 #elif (TCPWM1_GRP_NR > 0)
537 #define _CYHAL_TCPWM1_TOTAL_CNT_NR (TCPWM1_GRP_NR0_GRP_GRP_CNT_NR)
538 #endif
539 #endif
540
541 /*
542 All resources have an offset and a size, offsets are stored in an array
543 Subsequent resource offset equals the preceding offset + size
544 Offsets are bit indexes in the arrays that track used, configured etc.
545
546 Channel based resources have an extra array for block offsets
547
548 Note these are NOT offsets into the device's MMIO address space;
549 they are bit offsets into arrays that are internal to the HW mgr.
550 */
551
552
553 #define CY_OFFSET_ADC 0
554 #define CY_SIZE_ADC CY_BLOCK_COUNT_ADC
555 #define CY_OFFSET_ADCMIC (CY_OFFSET_ADC + CY_SIZE_ADC)
556 #define CY_SIZE_ADCMIC CY_BLOCK_COUNT_ADCMIC
557 #define CY_OFFSET_BLE (CY_OFFSET_ADCMIC + CY_SIZE_ADCMIC)
558 #define CY_SIZE_BLE CY_BLOCK_COUNT_BLE
559 #define CY_OFFSET_CAN (CY_OFFSET_BLE + CY_SIZE_BLE)
560 #define CY_SIZE_CAN CY_CHANNEL_COUNT_CAN
561 #define CY_OFFSET_CLOCK (CY_OFFSET_CAN + CY_SIZE_CAN)
562 #define CY_SIZE_CLOCK CY_CHANNEL_COUNT_CLOCK
563 #define CY_OFFSET_CRYPTO (CY_OFFSET_CLOCK + CY_SIZE_CLOCK)
564 #define CY_SIZE_CRYPTO CY_BLOCK_COUNT_CRYPTO
565 #define CY_OFFSET_DAC (CY_OFFSET_CRYPTO + CY_SIZE_CRYPTO)
566 #define CY_SIZE_DAC CY_BLOCK_COUNT_DAC
567 #define CY_OFFSET_DMA (CY_OFFSET_DAC + CY_SIZE_DAC)
568 #define CY_SIZE_DMA CY_CHANNEL_COUNT_DMA
569 #define CY_OFFSET_DW (CY_OFFSET_DMA + CY_SIZE_DMA)
570 #define CY_SIZE_DW CY_CHANNEL_COUNT_DW
571 #define CY_OFFSET_ETH (CY_OFFSET_DW + CY_SIZE_DW)
572 #define CY_SIZE_ETH CY_BLOCK_COUNT_ETH
573 #define CY_OFFSET_GPIO (CY_OFFSET_ETH + CY_SIZE_ETH)
574 #define CY_SIZE_GPIO CY_CHANNEL_COUNT_GPIO
575 #define CY_OFFSET_I2S (CY_OFFSET_GPIO + CY_SIZE_GPIO)
576 #define CY_SIZE_I2S CY_BLOCK_COUNT_I2S
577 #define CY_OFFSET_I3C (CY_OFFSET_I2S + CY_SIZE_I2S)
578 #define CY_SIZE_I3C CY_BLOCK_COUNT_I3C
579 #define CY_OFFSET_KEYSCAN (CY_OFFSET_I3C + CY_SIZE_I3C)
580 #define CY_SIZE_KEYSCAN CY_BLOCK_COUNT_KEYSCAN
581 #define CY_OFFSET_LCD (CY_OFFSET_KEYSCAN + CY_SIZE_KEYSCAN)
582 #define CY_SIZE_LCD CY_BLOCK_COUNT_LCD
583 #define CY_OFFSET_LIN (CY_OFFSET_LCD + CY_SIZE_LCD)
584 #define CY_SIZE_LIN CY_BLOCK_COUNT_LIN
585 #define CY_OFFSET_LPCOMP (CY_OFFSET_LIN + CY_SIZE_LIN)
586 #define CY_SIZE_LPCOMP CY_CHANNEL_COUNT_LPCOMP
587 #define CY_OFFSET_LPTIMER (CY_OFFSET_LPCOMP + CY_SIZE_LPCOMP)
588 #define CY_SIZE_LPTIMER CY_BLOCK_COUNT_MCWDT
589 #define CY_OFFSET_OPAMP (CY_OFFSET_LPTIMER + CY_SIZE_LPTIMER)
590 #define CY_SIZE_OPAMP CY_CHANNEL_COUNT_OPAMP
591 #define CY_OFFSET_PDMPCM (CY_OFFSET_OPAMP + CY_SIZE_OPAMP)
592 #define CY_SIZE_PDMPCM CY_BLOCK_COUNT_PDMPCM
593 #define CY_OFFSET_QSPI (CY_OFFSET_PDMPCM + CY_SIZE_PDMPCM)
594 #define CY_SIZE_QSPI CY_BLOCK_COUNT_QSPI
595 #define CY_OFFSET_RTC (CY_OFFSET_QSPI + CY_SIZE_QSPI)
596 #define CY_SIZE_RTC CY_BLOCK_COUNT_RTC
597 #define CY_OFFSET_SCB (CY_OFFSET_RTC + CY_SIZE_RTC)
598 #define CY_SIZE_SCB CY_BLOCK_COUNT_SCB
599 #define CY_OFFSET_SDHC (CY_OFFSET_SCB + CY_SIZE_SCB)
600 #define CY_SIZE_SDHC CY_BLOCK_COUNT_SDHC
601 #define CY_OFFSET_SDIODEV (CY_OFFSET_SDHC + CY_SIZE_SDHC)
602 #define CY_SIZE_SDIODEV CY_BLOCK_COUNT_SDIODEV
603 #define CY_OFFSET_TCPWM (CY_OFFSET_SDIODEV + CY_SIZE_SDIODEV)
604 #define CY_SIZE_TCPWM CY_CHANNEL_COUNT_TCPWM
605 #define CY_OFFSET_TDM (CY_OFFSET_TCPWM + CY_SIZE_TCPWM)
606 #define CY_SIZE_TDM CY_CHANNEL_COUNT_TDM
607 #define CY_OFFSET_UDB (CY_OFFSET_TDM + CY_SIZE_TDM)
608 #define CY_SIZE_UDB CY_BLOCK_COUNT_UDB
609 #define CY_OFFSET_USB (CY_OFFSET_UDB + CY_SIZE_UDB)
610 #define CY_SIZE_USB CY_BLOCK_COUNT_USB
611 #define CY_OFFSET_USBPD (CY_OFFSET_USB + CY_SIZE_USB)
612 #define CY_SIZE_USBPD CY_BLOCK_COUNT_USBPD
613
614 #define CY_TOTAL_ALLOCATABLE_ITEMS (CY_OFFSET_USBPD + CY_SIZE_USBPD)
615
616 /*******************************************************************************
617 * Variables
618 *******************************************************************************/
619
620 #if ((CY_CHANNEL_COUNT_GPIO) > 32)
621 /* 8 bits per port, offset = 8 * (portIdx) means port 33 has offset >= 256 */
622 typedef uint16_t _cyhal_hwmgr_offset_t;
623 #else
624 typedef uint8_t _cyhal_hwmgr_offset_t;
625 #endif
626
627 #if defined(COMPONENT_CAT1A)
628
629 #if ((PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + SRSS_NUM_HFROOT + 18) >= 256)
630 #error "Too many clocks to use uint8_t as offset type"
631 #endif
632
633 #if (defined(SRSS_HT_VARIANT) && (SRSS_HT_VARIANT > 0))
634 #define _SRSS_NUM_PILO 0U
635 #if !defined(SRSS_NUM_PLL400M)
636 #define SRSS_NUM_PLL400M (0)
637 #endif
638 #define _SRSS_NUM_PLL (SRSS_NUM_PLL + SRSS_NUM_PLL400M)
639 #else /* (defined(SRSS_HT_VARIANT) && (SRSS_HT_VARIANT > 0)) */
640 #define _SRSS_NUM_PILO 1U
641 #define _SRSS_NUM_PLL (SRSS_NUM_PLL)
642 #endif /* (defined(SRSS_HT_VARIANT) && (SRSS_HT_VARIANT > 0)) */
643
644 /* The order of items here must match the order in cyhal_clock_impl.h
645 *
646 * Each entry in the array below is the prior entry plus the number of clocks that exist
647 * of the prior type. When there is only 1 clock (e.g: IMO/ECO) the next number is simply
648 * one higher than the previous value. When there are multiple clocks (e.g.: PathMux/PLL)
649 * the subsequent value is increased by the define that specifies how many clocks are
650 * actually present. */
651 static const _cyhal_hwmgr_offset_t cyhal_block_offsets_clock[26] =
652 {
653 0, // 8-bit dividers
654 PERI_DIV_8_NR, // 16-bit dividers
655 PERI_DIV_8_NR + PERI_DIV_16_NR, // 16.5 bit dividers
656 PERI_DIV_8_NR + PERI_DIV_16_NR + PERI_DIV_16_5_NR, // 24.5 bit dividers
657
658 PERI_DIV_NR, // IMO
659 PERI_DIV_NR + 1, // ECO
660 PERI_DIV_NR + 2, // EXT
661 PERI_DIV_NR + 3, // ALTHF
662 PERI_DIV_NR + 4, // ALTLF
663 PERI_DIV_NR + 5, // ILO
664 #if (!(defined(SRSS_HT_VARIANT) && (SRSS_HT_VARIANT > 0)))
665 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + 5, // PILO
666 #endif /* (!(defined(SRSS_HT_VARIANT) && (SRSS_HT_VARIANT > 0))) */
667 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + 5, // WCO
668 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + 6, // MFO
669
670 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + 7, // PathMux
671
672 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + SRSS_NUM_CLKPATH + 7, // FLL
673 #if (defined(SRSS_HT_VARIANT) && (SRSS_HT_VARIANT > 0))
674 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + SRSS_NUM_CLKPATH + 8, // PLL200
675 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + SRSS_NUM_CLKPATH + 8 + SRSS_NUM_PLL, // PLL400
676 #else
677 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + SRSS_NUM_CLKPATH + 8, // PLL
678 #endif
679
680 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + SRSS_NUM_CLKPATH + _SRSS_NUM_PLL + 8, // LF
681 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + SRSS_NUM_CLKPATH + _SRSS_NUM_PLL + 9, // MF
682 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + SRSS_NUM_CLKPATH + _SRSS_NUM_PLL + 10, // HF
683
684 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + SRSS_NUM_CLKPATH + _SRSS_NUM_PLL + SRSS_NUM_HFROOT + 10, // PUMP
685 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + SRSS_NUM_CLKPATH + _SRSS_NUM_PLL + SRSS_NUM_HFROOT + 11, // BAK
686 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + SRSS_NUM_CLKPATH + _SRSS_NUM_PLL + SRSS_NUM_HFROOT + 12, // TIMER
687 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + SRSS_NUM_CLKPATH + _SRSS_NUM_PLL + SRSS_NUM_HFROOT + 13, // AltSysTick
688
689 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + SRSS_NUM_CLKPATH + _SRSS_NUM_PLL + SRSS_NUM_HFROOT + 14, // Fast
690 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + SRSS_NUM_CLKPATH + _SRSS_NUM_PLL + SRSS_NUM_HFROOT + 15, // Peri
691 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + _SRSS_NUM_PILO + SRSS_NUM_CLKPATH + _SRSS_NUM_PLL + SRSS_NUM_HFROOT + 16, // Slow
692 };
693
694 #elif defined(COMPONENT_CAT1B)
695
696 #define CY_MXSPERI_PCLK_DIV_CNT(gr) ( \
697 (PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_8_VECT) + \
698 (PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_16_VECT) + \
699 (PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_16_5_VECT) + \
700 (PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_24_5_VECT))
701
702 #define CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(gr) \
703 (PERI_DIV_OFFSET##gr), \
704 (PERI_DIV_OFFSET##gr + PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_8_VECT), \
705 (PERI_DIV_OFFSET##gr + PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_8_VECT + PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_16_VECT), \
706 (PERI_DIV_OFFSET##gr + PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_8_VECT + PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_16_VECT + PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_16_5_VECT)
707
708 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 0)
709 #define PERI_DIV_OFFSET0 (0)
710 #endif
711 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 1)
712 #define PERI_DIV_OFFSET1 (CY_MXSPERI_PCLK_DIV_CNT(0))
713 #endif
714 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 2
715 #define PERI_DIV_OFFSET2 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1))
716 #endif
717 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 3
718 #define PERI_DIV_OFFSET3 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2))
719 #endif
720 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 4
721 #define PERI_DIV_OFFSET4 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3))
722 #endif
723 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 5
724 #define PERI_DIV_OFFSET5 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4))
725 #endif
726 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 6
727 #define PERI_DIV_OFFSET6 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5))
728 #endif
729 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 7
730 #define PERI_DIV_OFFSET7 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6))
731 #endif
732 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 8
733 #define PERI_DIV_OFFSET8 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7))
734 #endif
735 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 9
736 #define PERI_DIV_OFFSET9 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8))
737 #endif
738 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 10
739 #define PERI_DIV_OFFSET10 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9))
740 #endif
741 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 11
742 #define PERI_DIV_OFFSET11 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9) + CY_MXSPERI_PCLK_DIV_CNT(10))
743 #endif
744 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 12
745 #define PERI_DIV_OFFSET12 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9) + CY_MXSPERI_PCLK_DIV_CNT(10) + CY_MXSPERI_PCLK_DIV_CNT(11))
746 #endif
747 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 13
748 #define PERI_DIV_OFFSET13 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9) + CY_MXSPERI_PCLK_DIV_CNT(10) + CY_MXSPERI_PCLK_DIV_CNT(11) + CY_MXSPERI_PCLK_DIV_CNT(12))
749 #endif
750 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 14
751 #define PERI_DIV_OFFSET14 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9) + CY_MXSPERI_PCLK_DIV_CNT(10) + CY_MXSPERI_PCLK_DIV_CNT(11) + CY_MXSPERI_PCLK_DIV_CNT(12) + CY_MXSPERI_PCLK_DIV_CNT(13))
752 #endif
753 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 15
754 #define PERI_DIV_OFFSET15 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9) + CY_MXSPERI_PCLK_DIV_CNT(10) + CY_MXSPERI_PCLK_DIV_CNT(11) + CY_MXSPERI_PCLK_DIV_CNT(12) + CY_MXSPERI_PCLK_DIV_CNT(13) + CY_MXSPERI_PCLK_DIV_CNT(14))
755 #endif
756
757
758 #if ((PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + SRSS_NUM_HFROOT + 18) >= 256)
759 #error "Too many clocks to use uint8_t as offset type"
760 #endif
761
762 /* The order of items here must match the order in cyhal_clock_impl.h
763 *
764 * Each entry in the array below is the prior entry plus the number of clocks that exist
765 * of the prior type. When there is only 1 clock (e.g: IMO/ECO) the next number is simply
766 * one higher than the previous value. When there are multiple clocks (e.g.: PathMux/PLL)
767 * the subsequent value is increased by the define that specifies how many clocks are
768 * actually present. */
769 static const _cyhal_hwmgr_offset_t cyhal_block_offsets_clock[PERI_PERI_PCLK_PCLK_GROUP_NR * 4 + 22] =
770 {
771 // Peripheral dividers (8-bit, 16-bit, 16.5-bit & 24.5 bit) for each group
772 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 0)
773 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(0),
774 #endif
775 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 1)
776 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(1),
777 #endif
778 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 2)
779 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(2),
780 #endif
781 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 3)
782 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(3),
783 #endif
784 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 4)
785 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(4),
786 #endif
787 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 5)
788 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(5),
789 #endif
790 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 6)
791 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(6),
792 #endif
793 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 7)
794 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(7),
795 #endif
796 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 8)
797 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(8),
798 #endif
799 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 9)
800 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(9),
801 #endif
802 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 10)
803 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(10),
804 #endif
805 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 11)
806 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(11),
807 #endif
808 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 12)
809 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(12),
810 #endif
811 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 13)
812 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(13),
813 #endif
814 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 14)
815 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(14),
816 #endif
817 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 15)
818 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(15),
819 #endif
820
821 PERI_DIV_NR, // IHO
822 PERI_DIV_NR + 1, // IMO
823 PERI_DIV_NR + 2, // ECO
824 PERI_DIV_NR + 3, // EXT
825 PERI_DIV_NR + 4, // ALTHF
826 PERI_DIV_NR + 5, // ALTLF
827 PERI_DIV_NR + 6, // ILO
828 PERI_DIV_NR + 7, // PILO
829 PERI_DIV_NR + 8, // WCO
830 PERI_DIV_NR + 9, // MFO
831
832 PERI_DIV_NR + 10, // PathMux
833
834 PERI_DIV_NR + SRSS_NUM_CLKPATH + 10, // FLL
835 PERI_DIV_NR + SRSS_NUM_CLKPATH + 11, // PLL200
836 PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_PLL200M + 11, // PLL400
837 PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_PLL200M + SRSS_NUM_PLL400M + 11, // ECO_PreScaler
838
839 PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_PLL200M + SRSS_NUM_PLL400M + 12, // LF
840 PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_PLL200M + SRSS_NUM_PLL400M + 13, // MF
841 PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_PLL200M + SRSS_NUM_PLL400M + 14, // HF
842
843 PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_PLL200M + SRSS_NUM_PLL400M + SRSS_NUM_HFROOT + 14, // PUMP
844 PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_PLL200M + SRSS_NUM_PLL400M + SRSS_NUM_HFROOT + 15, // BAK
845 PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_PLL200M + SRSS_NUM_PLL400M + SRSS_NUM_HFROOT + 16, // AltSysTick
846 PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_PLL200M + SRSS_NUM_PLL400M + SRSS_NUM_HFROOT + 17, // Peri
847 };
848
849 #elif defined(COMPONENT_CAT1C)
850
851 #define CY_MXSPERI_PCLK_DIV_CNT(gr) ( \
852 (PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_8_VECT) + \
853 (PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_16_VECT) + \
854 (PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_16_5_VECT) + \
855 (PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_24_5_VECT))
856
857 #define CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(gr) \
858 (PERI_DIV_OFFSET##gr), \
859 (PERI_DIV_OFFSET##gr + PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_8_VECT), \
860 (PERI_DIV_OFFSET##gr + PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_8_VECT + PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_16_VECT), \
861 (PERI_DIV_OFFSET##gr + PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_8_VECT + PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_16_VECT + PERI_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_16_5_VECT)
862
863 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 0)
864 #define PERI_DIV_OFFSET0 (0)
865 #endif
866 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 1)
867 #define PERI_DIV_OFFSET1 (CY_MXSPERI_PCLK_DIV_CNT(0))
868 #endif
869 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 2
870 #define PERI_DIV_OFFSET2 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1))
871 #endif
872 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 3
873 #define PERI_DIV_OFFSET3 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2))
874 #endif
875 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 4
876 #define PERI_DIV_OFFSET4 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3))
877 #endif
878 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 5
879 #define PERI_DIV_OFFSET5 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4))
880 #endif
881 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 6
882 #define PERI_DIV_OFFSET6 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5))
883 #endif
884 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 7
885 #define PERI_DIV_OFFSET7 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6))
886 #endif
887 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 8
888 #define PERI_DIV_OFFSET8 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7))
889 #endif
890 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 9
891 #define PERI_DIV_OFFSET9 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8))
892 #endif
893 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 10
894 #define PERI_DIV_OFFSET10 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9))
895 #endif
896 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 11
897 #define PERI_DIV_OFFSET11 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9) + CY_MXSPERI_PCLK_DIV_CNT(10))
898 #endif
899 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 12
900 #define PERI_DIV_OFFSET12 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9) + CY_MXSPERI_PCLK_DIV_CNT(10) + CY_MXSPERI_PCLK_DIV_CNT(11))
901 #endif
902 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 13
903 #define PERI_DIV_OFFSET13 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9) + CY_MXSPERI_PCLK_DIV_CNT(10) + CY_MXSPERI_PCLK_DIV_CNT(11) + CY_MXSPERI_PCLK_DIV_CNT(12))
904 #endif
905 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 14
906 #define PERI_DIV_OFFSET14 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9) + CY_MXSPERI_PCLK_DIV_CNT(10) + CY_MXSPERI_PCLK_DIV_CNT(11) + CY_MXSPERI_PCLK_DIV_CNT(12) + CY_MXSPERI_PCLK_DIV_CNT(13))
907 #endif
908 #if (PERI_PERI_PCLK_PCLK_GROUP_NR) > 15
909 #define PERI_DIV_OFFSET15 (CY_MXSPERI_PCLK_DIV_CNT(0) + CY_MXSPERI_PCLK_DIV_CNT(1) + CY_MXSPERI_PCLK_DIV_CNT(2) + CY_MXSPERI_PCLK_DIV_CNT(3) + CY_MXSPERI_PCLK_DIV_CNT(4) + CY_MXSPERI_PCLK_DIV_CNT(5) + CY_MXSPERI_PCLK_DIV_CNT(6) + CY_MXSPERI_PCLK_DIV_CNT(7) + CY_MXSPERI_PCLK_DIV_CNT(8) + CY_MXSPERI_PCLK_DIV_CNT(9) + CY_MXSPERI_PCLK_DIV_CNT(10) + CY_MXSPERI_PCLK_DIV_CNT(11) + CY_MXSPERI_PCLK_DIV_CNT(12) + CY_MXSPERI_PCLK_DIV_CNT(13) + CY_MXSPERI_PCLK_DIV_CNT(14))
910 #endif
911
912
913 #if ((PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + SRSS_NUM_HFROOT + 18) >= 256)
914 #error "Too many clocks to use uint8_t as offset type"
915 #endif
916
917 /* The order of items here must match the order in cyhal_clock_impl.h
918 *
919 * Each entry in the array below is the prior entry plus the number of clocks that exist
920 * of the prior type. When there is only 1 clock (e.g: IMO/ECO) the next number is simply
921 * one higher than the previous value. When there are multiple clocks (e.g.: PathMux/PLL)
922 * the subsequent value is increased by the define that specifies how many clocks are
923 * actually present. */
924 static const _cyhal_hwmgr_offset_t cyhal_block_offsets_clock[PERI_PERI_PCLK_PCLK_GROUP_NR * 4 + 22] =
925 {
926 // Peripheral dividers (8-bit, 16-bit, 16.5-bit & 24.5 bit) for each group
927 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 0)
928 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(0),
929 #endif
930 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 1)
931 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(1),
932 #endif
933 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 2)
934 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(2),
935 #endif
936 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 3)
937 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(3),
938 #endif
939 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 4)
940 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(4),
941 #endif
942 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 5)
943 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(5),
944 #endif
945 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 6)
946 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(6),
947 #endif
948 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 7)
949 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(7),
950 #endif
951 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 8)
952 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(8),
953 #endif
954 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 9)
955 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(9),
956 #endif
957 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 10)
958 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(10),
959 #endif
960 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 11)
961 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(11),
962 #endif
963 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 12)
964 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(12),
965 #endif
966 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 13)
967 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(13),
968 #endif
969 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 14)
970 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(14),
971 #endif
972 #if (PERI_PERI_PCLK_PCLK_GROUP_NR > 15)
973 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(15),
974 #endif
975
976 PERI_DIV_NR, // IMO
977 PERI_DIV_NR + 1, // ECO
978 PERI_DIV_NR + 2, // EXT
979 PERI_DIV_NR + 3, // ILO
980 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + 3, // WCO
981 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + 4, // PathMux
982 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + SRSS_NUM_CLKPATH + 4, // FLL
983 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + SRSS_NUM_CLKPATH + 5, // PLL200
984 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + 5, // PLL400
985
986 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + SRSS_NUM_PLL400M + 5, // LF
987 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + SRSS_NUM_PLL400M + 6, // HF
988
989 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + SRSS_NUM_PLL400M + SRSS_NUM_HFROOT + 6, // BAK
990 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + SRSS_NUM_PLL400M + SRSS_NUM_HFROOT + 7, // AltSysTick
991 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + SRSS_NUM_PLL400M + SRSS_NUM_HFROOT + 8, // Peri
992 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + SRSS_NUM_PLL400M + SRSS_NUM_HFROOT + 9, // Fast
993 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + SRSS_NUM_PLL400M + SRSS_NUM_HFROOT + _CYHAL_SRSS_NUM_FAST + 9, // Slow
994 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + SRSS_NUM_PLL400M + SRSS_NUM_HFROOT + _CYHAL_SRSS_NUM_FAST + 10, // MEM
995 PERI_DIV_NR + _CYHAL_SRSS_NUM_ILO + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + SRSS_NUM_PLL400M + SRSS_NUM_HFROOT + _CYHAL_SRSS_NUM_FAST + 11, // Timer
996 };
997
998 #elif defined(COMPONENT_CAT1D)
999
1000 #define CY_MXSPERI_PCLK_DIV_CNT(instance, gr) ( \
1001 (PERI##instance##_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_8_VECT) + \
1002 (PERI##instance##_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_16_VECT) + \
1003 (PERI##instance##_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_16_5_VECT) + \
1004 (PERI##instance##_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_24_5_VECT))
1005
1006 #define CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(instance, gr) \
1007 (PERI##instance##_DIV_OFFSET##gr), \
1008 (PERI##instance##_DIV_OFFSET##gr + PERI##instance##_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_8_VECT), \
1009 (PERI##instance##_DIV_OFFSET##gr + PERI##instance##_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_8_VECT + PERI##instance##_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_16_VECT), \
1010 (PERI##instance##_DIV_OFFSET##gr + PERI##instance##_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_8_VECT + PERI##instance##_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_16_VECT + PERI##instance##_PERI_PCLK_PCLK_GROUP_NR##gr##_GR_DIV_16_5_VECT)
1011
1012 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR > 0)
1013 #define PERI0_DIV_OFFSET0 (0)
1014 #endif
1015 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR > 1)
1016 #define PERI0_DIV_OFFSET1 (CY_MXSPERI_PCLK_DIV_CNT(0, 0))
1017 #endif
1018 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR) > 2
1019 #define PERI0_DIV_OFFSET2 (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1))
1020 #endif
1021 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR) > 3
1022 #define PERI0_DIV_OFFSET3 (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1) + CY_MXSPERI_PCLK_DIV_CNT(0, 2))
1023 #endif
1024 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR) > 4
1025 #define PERI0_DIV_OFFSET4 (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1) + CY_MXSPERI_PCLK_DIV_CNT(0, 2) + CY_MXSPERI_PCLK_DIV_CNT(0, 3))
1026 #endif
1027 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR) > 5
1028 #define PERI0_DIV_OFFSET5 (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1) + CY_MXSPERI_PCLK_DIV_CNT(0, 2) + CY_MXSPERI_PCLK_DIV_CNT(0, 3) + CY_MXSPERI_PCLK_DIV_CNT(0, 4))
1029 #endif
1030 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR) > 6
1031 #define PERI0_DIV_OFFSET6 (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1) + CY_MXSPERI_PCLK_DIV_CNT(0, 2) + CY_MXSPERI_PCLK_DIV_CNT(0, 3) + CY_MXSPERI_PCLK_DIV_CNT(0, 4) + CY_MXSPERI_PCLK_DIV_CNT(0, 5))
1032 #endif
1033 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR) > 7
1034 #define PERI0_DIV_OFFSET7 (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1) + CY_MXSPERI_PCLK_DIV_CNT(0, 2) + CY_MXSPERI_PCLK_DIV_CNT(0, 3) + CY_MXSPERI_PCLK_DIV_CNT(0, 4) + CY_MXSPERI_PCLK_DIV_CNT(0, 5) + CY_MXSPERI_PCLK_DIV_CNT(0, 6))
1035 #endif
1036 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR) > 8
1037 #define PERI0_DIV_OFFSET8 (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1) + CY_MXSPERI_PCLK_DIV_CNT(0, 2) + CY_MXSPERI_PCLK_DIV_CNT(0, 3) + CY_MXSPERI_PCLK_DIV_CNT(0, 4) + CY_MXSPERI_PCLK_DIV_CNT(0, 5) + CY_MXSPERI_PCLK_DIV_CNT(0, 6) + CY_MXSPERI_PCLK_DIV_CNT(0, 7))
1038 #endif
1039 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR) > 9
1040 #define PERI0_DIV_OFFSET9 (CY_MXSPERI_PCLK_DIV_CNT(0, 0) + CY_MXSPERI_PCLK_DIV_CNT(0, 1) + CY_MXSPERI_PCLK_DIV_CNT(0, 2) + CY_MXSPERI_PCLK_DIV_CNT(0, 3) + CY_MXSPERI_PCLK_DIV_CNT(0, 4) + CY_MXSPERI_PCLK_DIV_CNT(0, 5) + CY_MXSPERI_PCLK_DIV_CNT(0, 6) + CY_MXSPERI_PCLK_DIV_CNT(0, 7) + CY_MXSPERI_PCLK_DIV_CNT(0, 8))
1041 #endif
1042
1043 #if (PERI1_PERI_PCLK_PCLK_GROUP_NR > 0)
1044 #define PERI1_DIV_OFFSET0 (0)
1045 #endif
1046 #if (PERI1_PERI_PCLK_PCLK_GROUP_NR > 1)
1047 #define PERI1_DIV_OFFSET1 (CY_MXSPERI_PCLK_DIV_CNT(1, 0))
1048 #endif
1049 #if (PERI1_PERI_PCLK_PCLK_GROUP_NR) > 2
1050 #define PERI1_DIV_OFFSET2 (CY_MXSPERI_PCLK_DIV_CNT(1, 0) + CY_MXSPERI_PCLK_DIV_CNT(1, 1))
1051 #endif
1052 #if (PERI1_PERI_PCLK_PCLK_GROUP_NR) > 3
1053 #define PERI1_DIV_OFFSET3 (CY_MXSPERI_PCLK_DIV_CNT(1, 0) + CY_MXSPERI_PCLK_DIV_CNT(1, 1) + CY_MXSPERI_PCLK_DIV_CNT(1, 2))
1054 #endif
1055 #if (PERI1_PERI_PCLK_PCLK_GROUP_NR) > 4
1056 #define PERI1_DIV_OFFSET4 (CY_MXSPERI_PCLK_DIV_CNT(1, 0) + CY_MXSPERI_PCLK_DIV_CNT(1, 1) + CY_MXSPERI_PCLK_DIV_CNT(1, 2) + CY_MXSPERI_PCLK_DIV_CNT(1, 3))
1057 #endif
1058 #if (PERI1_PERI_PCLK_PCLK_GROUP_NR) > 5
1059 #define PERI1_DIV_OFFSET5 (CY_MXSPERI_PCLK_DIV_CNT(1, 0) + CY_MXSPERI_PCLK_DIV_CNT(1, 1) + CY_MXSPERI_PCLK_DIV_CNT(1, 2) + CY_MXSPERI_PCLK_DIV_CNT(1, 3) + CY_MXSPERI_PCLK_DIV_CNT(1, 4))
1060 #endif
1061 #if defined(PERI2_PERI_PCLK_PCLK_GROUP_NR)
1062 #warning "PERI2 dividers instance is not handled"
1063 #endif /* defined(PERI2_PERI_PCLK_PCLK_GROUP_NR) */
1064
1065 #if ((PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_PLL + SRSS_NUM_HFROOT + 18) >= 256)
1066 #error "Too many clocks to use uint8_t as offset type"
1067 #endif
1068
1069 #if !defined(PERI0_PERI_PCLK_PCLK_GROUP_NR) || !defined(PERI1_PERI_PCLK_PCLK_GROUP_NR)
1070 #error "Unexpected number of PERI blocks"
1071 #endif /* !defined(PERI0_PERI_PCLK_PCLK_GROUP_NR) || !defined(PERI1_PERI_PCLK_PCLK_GROUP_NR) */
1072
1073 /* The order of items here must match the order in cyhal_clock_impl.h
1074 *
1075 * Each entry in the array below is the prior entry plus the number of clocks that exist
1076 * of the prior type. When there is only 1 clock (e.g: IMO/ECO) the next number is simply
1077 * one higher than the previous value. When there are multiple clocks (e.g.: PathMux/PLL)
1078 * the subsequent value is increased by the define that specifies how many clocks are
1079 * actually present. */
1080 static const _cyhal_hwmgr_offset_t cyhal_block_offsets_clock[(PERI0_PERI_PCLK_PCLK_GROUP_NR + PERI1_PERI_PCLK_PCLK_GROUP_NR) * 4 + 14] =
1081 {
1082 // Peripheral dividers (8-bit, 16-bit, 16.5-bit & 24.5 bit) for each group
1083 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR > 0)
1084 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(0, 0),
1085 #endif
1086 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR > 1)
1087 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(0, 1),
1088 #endif
1089 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR > 2)
1090 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(0, 2),
1091 #endif
1092 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR > 3)
1093 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(0, 3),
1094 #endif
1095 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR > 4)
1096 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(0, 4),
1097 #endif
1098 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR > 5)
1099 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(0, 5),
1100 #endif
1101 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR > 6)
1102 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(0, 6),
1103 #endif
1104 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR > 7)
1105 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(0, 7),
1106 #endif
1107 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR > 8)
1108 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(0, 8),
1109 #endif
1110 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR > 9)
1111 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(0, 9),
1112 #endif
1113 #if (PERI0_PERI_PCLK_PCLK_GROUP_NR > 10)
1114 #warning "Unhandled number of PERI0 PCLK"
1115 #endif
1116
1117 #if (PERI1_PERI_PCLK_PCLK_GROUP_NR > 0)
1118 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(1, 0),
1119 #endif
1120 #if (PERI1_PERI_PCLK_PCLK_GROUP_NR > 1)
1121 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(1, 1),
1122 #endif
1123 #if (PERI1_PERI_PCLK_PCLK_GROUP_NR > 2)
1124 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(1, 2),
1125 #endif
1126 #if (PERI1_PERI_PCLK_PCLK_GROUP_NR > 3)
1127 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(1, 3),
1128 #endif
1129 #if (PERI1_PERI_PCLK_PCLK_GROUP_NR > 4)
1130 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(1, 4),
1131 #endif
1132 #if (PERI1_PERI_PCLK_PCLK_GROUP_NR > 5)
1133 CY_MXSPERI_PCLK_DIV_CNT_OFFSETS(1, 5),
1134 #endif
1135 #if (PERI1_PERI_PCLK_PCLK_GROUP_NR > 6)
1136 #warning "Unhandled number of PERI1 PCLK"
1137 #endif
1138
1139 PERI_DIV_NR, // IHO
1140 PERI_DIV_NR + 1, // ECO
1141 PERI_DIV_NR + 2, // EXT
1142 PERI_DIV_NR + 3, // PILO
1143 PERI_DIV_NR + 4, // WCO
1144
1145 PERI_DIV_NR + 5, // PathMux
1146
1147 PERI_DIV_NR + SRSS_NUM_CLKPATH + 5, // DPLL_LP
1148 PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_DPLL_LP + 5, // DPLL_HP
1149 PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_DPLL_LP + SRSS_NUM_DPLL_HP + 5, // ECO_PreScaler
1150
1151 PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_DPLL_LP + SRSS_NUM_DPLL_HP + 6, // LF
1152 PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_DPLL_LP + SRSS_NUM_DPLL_HP + 7, // MF
1153 PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_DPLL_LP + SRSS_NUM_DPLL_HP + 8, // HF
1154
1155 PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_DPLL_LP + SRSS_NUM_DPLL_HP + SRSS_NUM_HFROOT + 8, // BAK
1156 PERI_DIV_NR + SRSS_NUM_CLKPATH + SRSS_NUM_DPLL_LP + SRSS_NUM_DPLL_HP + SRSS_NUM_HFROOT + 9 // Peri
1157
1158 };
1159
1160 #elif defined(COMPONENT_CAT2)
1161 /* The order of items here must match the order in cyhal_clock_impl.h
1162 *
1163 * Each entry in the array below is the prior entry plus the number of clocks that exist
1164 * of the prior type. When there is only 1 clock (e.g: IMO/ECO) the next number is simply
1165 * one higher than the previous value. When there are multiple clocks (e.g.: PCLK)
1166 * the subsequent value is increased by the define that specifies how many clocks are
1167 * actually present. */
1168 static const _cyhal_hwmgr_offset_t cyhal_block_offsets_clock[16] =
1169 {
1170 0, // 8-bit dividers
1171 PERI_PCLK_DIV_8_NR, // 16-bit dividers
1172 PERI_PCLK_DIV_8_NR + PERI_PCLK_DIV_16_NR, // 16.5 bit dividers
1173 PERI_PCLK_DIV_8_NR + PERI_PCLK_DIV_16_NR + PERI_PCLK_DIV_16_5_NR, // 24.5 bit dividers
1174
1175 PERI_PCLK_CLOCK_NR, // IMO
1176 PERI_PCLK_CLOCK_NR + 1, // ECO
1177 PERI_PCLK_CLOCK_NR + 2, // EXT
1178 PERI_PCLK_CLOCK_NR + 3, // ILO
1179 PERI_PCLK_CLOCK_NR + 4, // WCO
1180
1181 PERI_PCLK_CLOCK_NR + 5, // WDCSEL
1182 PERI_PCLK_CLOCK_NR + 6, // PLLSEL
1183 PERI_PCLK_CLOCK_NR + 7, // PLL
1184 PERI_PCLK_CLOCK_NR + 8, // LF
1185 PERI_PCLK_CLOCK_NR + 9, // HF
1186 PERI_PCLK_CLOCK_NR + 10, // PUMP
1187 PERI_PCLK_CLOCK_NR + 11, // SYS
1188 };
1189 #endif
1190
1191 static const _cyhal_hwmgr_offset_t cyhal_block_offsets_dma[] =
1192 {
1193 0,
1194 #if defined(CY_IP_MXAHBDMAC_INSTANCES)
1195 #if (CY_IP_MXAHBDMAC_INSTANCES > 1)
1196 MXAHBDMAC0_CH_NR,
1197 #endif
1198 #if (CY_IP_MXAHBDMAC_INSTANCES > 2)
1199 MXAHBDMAC0_CH_NR + MXAHBDMAC1_CH_NR,
1200 #endif
1201 #if (CY_IP_MXAHBDMAC_INSTANCES > 3)
1202 #warning Unhandled DMA instance count
1203 #endif
1204 #endif /* defined(CY_IP_MXAHBDMAC_INSTANCES) */
1205 };
1206
1207 #if defined(COMPONENT_CAT1A) || defined(COMPONENT_CAT1B) || defined(COMPONENT_CAT1C) || defined(COMPONENT_CAT1D)
1208 static const _cyhal_hwmgr_offset_t cyhal_block_offsets_dw[] =
1209 {
1210 0,
1211 CPUSS_DW0_CH_NR,
1212 };
1213
1214 static const _cyhal_hwmgr_offset_t cyhal_block_offsets_tdm[] =
1215 {
1216 0,
1217 #if defined(CY_IP_MXTDM_INSTANCES)
1218 #if (CY_IP_MXTDM_INSTANCES > 1)
1219 TDM_NR,
1220 #endif
1221 #endif
1222 };
1223 #endif
1224
1225 static const _cyhal_hwmgr_offset_t cyhal_block_offsets_gpio[] =
1226 {
1227 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120,
1228 #if defined(COMPONENT_CAT1C) || defined(COMPONENT_CAT1D)
1229 /* Most devices don't have more than 16 ports, so save the flash in most cases */
1230 128, 136, 144, 152, 160, 168, 176, 184, 192, 200, 208, 216, 224,
1231 232, 240, 248, 256, 264, 272, 280
1232 #elif (defined(SRSS_HT_VARIANT) && (SRSS_HT_VARIANT > 0))
1233 /* Covers TVIIBE parts */
1234 128, 136, 144, 152, 160, 168, 176, 184
1235 #endif
1236 };
1237
1238 static const _cyhal_hwmgr_offset_t cyhal_block_offsets_can[] =
1239 {
1240 #ifdef CY_IP_MXTTCANFD_INSTANCES
1241 #if (CY_IP_MXTTCANFD_INSTANCES > 0)
1242 0,
1243 #endif
1244 #if (CY_IP_MXTTCANFD_INSTANCES > 1)
1245 CANFD0_CAN_NR,
1246 #endif
1247 #if (CY_IP_MXTTCANFD_INSTANCES > 2)
1248 CANFD0_CAN_NR + CANFD1_CAN_NR,
1249 #endif
1250 #if (CY_IP_MXTTCANFD_INSTANCES > 3)
1251 CANFD0_CAN_NR + CANFD1_CAN_NR + CANFD2_CAN_NR,
1252 #endif
1253 #if (CY_IP_MXTTCANFD_INSTANCES > 4)
1254 CANFD0_CAN_NR + CANFD1_CAN_NR + CANFD2_CAN_NR + CANFD3_CAN_NR,
1255 #endif
1256 #if (CY_IP_MXTTCANFD_INSTANCES > 5)
1257 CANFD0_CAN_NR + CANFD1_CAN_NR + CANFD2_CAN_NR + CANFD3_CAN_NR + CANFD4_CAN_NR,
1258 #endif
1259 #if (CY_IP_MXTTCANFD_INSTANCES > 6)
1260 CANFD0_CAN_NR + CANFD1_CAN_NR + CANFD2_CAN_NR + CANFD3_CAN_NR + CANFD4_CAN_NR + CANFD5_CAN_NR,
1261 #endif
1262 #if (CY_IP_MXTTCANFD_INSTANCES > 7)
1263 CANFD0_CAN_NR + CANFD1_CAN_NR + CANFD2_CAN_NR + CANFD3_CAN_NR + CANFD4_CAN_NR + CANFD5_CAN_NR + CANFD6_CAN_NR,
1264 #endif
1265 #if (CY_IP_MXTTCANFD_INSTANCES > 8)
1266 CANFD0_CAN_NR + CANFD1_CAN_NR + CANFD2_CAN_NR + CANFD3_CAN_NR + CANFD4_CAN_NR + CANFD5_CAN_NR + CANFD6_CAN_NR + CANFD7_CAN_NR,
1267 #endif
1268 #if (CY_IP_MXTTCANFD_INSTANCES > 9)
1269 CANFD0_CAN_NR + CANFD1_CAN_NR + CANFD2_CAN_NR + CANFD3_CAN_NR + CANFD4_CAN_NR + CANFD5_CAN_NR + CANFD6_CAN_NR + CANFD7_CAN_NR + CANFD8_CAN_NR,
1270 #endif
1271 #if (CY_IP_MXTTCANFD_INSTANCES > 10)
1272 #warning Unhandled CAN instance count
1273 #endif
1274 #else
1275 0
1276 #endif
1277 };
1278
1279 static const _cyhal_hwmgr_offset_t cyhal_block_offsets_lpcomp[] =
1280 {
1281 0,
1282 #if (CY_BLOCK_COUNT_LPCOMP > 1)
1283 #error "Unhandled LPComp count"
1284 #endif
1285 };
1286
1287 static const _cyhal_hwmgr_offset_t cyhal_block_offsets_opamp[] =
1288 {
1289 0,
1290 #if (CY_BLOCK_COUNT_OPAMP > 1)
1291 2,
1292 #elif (CY_BLOCK_COUNT_OPAMP > 2)
1293 #error "Unhandled Opamp count"
1294 #endif
1295 };
1296
1297 static const _cyhal_hwmgr_offset_t cyhal_block_offsets_tcpwm[] =
1298 {
1299 0,
1300 #ifdef CY_IP_MXTCPWM_INSTANCES
1301 #if CY_IP_MXTCPWM_VERSION == 1
1302 #if (CY_IP_MXTCPWM_INSTANCES > 1)
1303 TCPWM0_CNT_NR,
1304 #endif
1305 #if (CY_IP_MXTCPWM_INSTANCES > 2)
1306 TCPWM0_CNT_NR + TCPWM1_CNT_NR,
1307 #endif
1308 #if (CY_IP_MXTCPWM_INSTANCES > 3)
1309 TCPWM0_CNT_NR + TCPWM1_CNT_NR + TCPWM2_CNT_NR,
1310 #endif
1311 #if (CY_IP_MXTCPWM_INSTANCES > 4)
1312 TCPWM0_CNT_NR + TCPWM1_CNT_NR + TCPWM2_CNT_NR + TCPWM3_CNT_NR,
1313 #endif
1314 #if (CY_IP_MXTCPWM_INSTANCES > 5)
1315 TCPWM0_CNT_NR + TCPWM1_CNT_NR + TCPWM2_CNT_NR + TCPWM3_CNT_NR + TCPWM4_CNT_NR,
1316 #endif
1317 #if (CY_IP_MXTCPWM_INSTANCES > 6)
1318 TCPWM0_CNT_NR + TCPWM1_CNT_NR + TCPWM2_CNT_NR + TCPWM3_CNT_NR + TCPWM4_CNT_NR + TCPWM5_CNT_NR,
1319 #endif
1320 #if (CY_IP_MXTCPWM_INSTANCES > 7)
1321 TCPWM0_CNT_NR + TCPWM1_CNT_NR + TCPWM2_CNT_NR + TCPWM3_CNT_NR + TCPWM4_CNT_NR + TCPWM5_CNT_NR + TCPWM6_CNT_NR,
1322 #endif
1323 #if (CY_IP_MXTCPWM_INSTANCES > 8)
1324 TCPWM0_CNT_NR + TCPWM1_CNT_NR + TCPWM2_CNT_NR + TCPWM3_CNT_NR + TCPWM4_CNT_NR + TCPWM5_CNT_NR + TCPWM6_CNT_NR + TCPWM7_CNT_NR,
1325 #endif
1326 #if (CY_IP_MXTCPWM_INSTANCES > 9)
1327 TCPWM0_CNT_NR + TCPWM1_CNT_NR + TCPWM2_CNT_NR + TCPWM3_CNT_NR + TCPWM4_CNT_NR + TCPWM5_CNT_NR + TCPWM6_CNT_NR + TCPWM7_CNT_NR + TCPWM8_CNT_NR,
1328 #endif
1329 #if (CY_IP_MXTCPWM_INSTANCES > 10)
1330 #warning Unhandled TCPWM instance count
1331 #endif
1332 #else // CY_IP_MXTCPWM_VERSION >= 2
1333 #if (CY_IP_MXTCPWM_INSTANCES == 1)
1334 #if (TCPWM_GRP_NR > 1)
1335 TCPWM_GRP_NR0_GRP_GRP_CNT_NR,
1336 #endif
1337 #if (TCPWM_GRP_NR > 2)
1338 TCPWM_GRP_NR0_GRP_GRP_CNT_NR + TCPWM_GRP_NR1_GRP_GRP_CNT_NR,
1339 #endif
1340 #if (TCPWM_GRP_NR > 3)
1341 TCPWM_GRP_NR0_GRP_GRP_CNT_NR + TCPWM_GRP_NR1_GRP_GRP_CNT_NR + TCPWM_GRP_NR2_GRP_GRP_CNT_NR,
1342 #endif
1343 #elif (CY_IP_MXTCPWM_INSTANCES == 2)
1344 // The 'else's are placeholders to ensure the groups line up, even if groups are empty or absent
1345 #if (TCPWM0_GRP_NR > 1)
1346 TCPWM0_GRP_NR0_GRP_GRP_CNT_NR,
1347 #else
1348 _CYHAL_TCPWM0_TOTAL_CNT_NR,
1349 #endif
1350 #if (TCPWM0_GRP_NR > 2)
1351 TCPWM0_GRP_NR0_GRP_GRP_CNT_NR + TCPWM0_GRP_NR1_GRP_GRP_CNT_NR,
1352 #else
1353 _CYHAL_TCPWM0_TOTAL_CNT_NR,
1354 #endif
1355 #if (TCPWM0_GRP_NR > 3)
1356 TCPWM0_GRP_NR0_GRP_GRP_CNT_NR + TCPWM0_GRP_NR1_GRP_GRP_CNT_NR + TCPWM0_GRP_NR2_GRP_GRP_CNT_NR,
1357 #else
1358 _CYHAL_TCPWM0_TOTAL_CNT_NR,
1359 #endif
1360
1361 #if (TCPWM1_GRP_NR > 0)
1362 _CYHAL_TCPWM0_TOTAL_CNT_NR,
1363 #else
1364 _CYHAL_TCPWM0_TOTAL_CNT_NR + _CYHAL_TCPWM1_TOTAL_CNT_NR,
1365 #endif
1366 #if (TCPWM1_GRP_NR > 1)
1367 _CYHAL_TCPWM0_TOTAL_CNT_NR + TCPWM1_GRP_NR0_GRP_GRP_CNT_NR,
1368 #else
1369 _CYHAL_TCPWM0_TOTAL_CNT_NR +_CYHAL_TCPWM1_TOTAL_CNT_NR,
1370 #endif
1371 #if (TCPWM1_GRP_NR > 2)
1372 _CYHAL_TCPWM0_TOTAL_CNT_NR + TCPWM1_GRP_NR0_GRP_GRP_CNT_NR + TCPWM1_GRP_NR1_GRP_GRP_CNT_NR,
1373 #else
1374 _CYHAL_TCPWM0_TOTAL_CNT_NR +_CYHAL_TCPWM1_TOTAL_CNT_NR,
1375 #endif
1376 #if (TCPWM1_GRP_NR > 3)
1377 _CYHAL_TCPWM0_TOTAL_CNT_NR + TCPWM1_GRP_NR0_GRP_GRP_CNT_NR + TCPWM1_GRP_NR1_GRP_GRP_CNT_NR + TCPWM1_GRP_NR2_GRP_GRP_CNT_NR,
1378 #else
1379 _CYHAL_TCPWM0_TOTAL_CNT_NR +_CYHAL_TCPWM1_TOTAL_CNT_NR,
1380 #endif
1381 #else
1382 #warning Unhandled TCPWM instance count
1383 #endif
1384 #endif
1385 #endif
1386 };
1387
1388 static uint8_t cyhal_used[(CY_TOTAL_ALLOCATABLE_ITEMS + 7) / 8] = {0};
1389
1390 // Note: the ordering here needs to be parallel to that of cyhal_resource_t
1391 static const uint16_t cyhal_resource_offsets[] =
1392 {
1393 #if defined(COMPONENT_CAT1A) || defined(COMPONENT_CAT1B) || defined(COMPONENT_CAT1C) || defined(COMPONENT_CAT1D)
1394 CY_OFFSET_ADC,
1395 CY_OFFSET_ADCMIC,
1396 CY_OFFSET_BLE,
1397 CY_OFFSET_CAN,
1398 CY_OFFSET_CLOCK, /* Placeholder for ClockPath which is deprecated */
1399 CY_OFFSET_CLOCK,
1400 CY_OFFSET_CRYPTO,
1401 CY_OFFSET_DAC,
1402 CY_OFFSET_DMA,
1403 CY_OFFSET_DW,
1404 CY_OFFSET_ETH,
1405 CY_OFFSET_GPIO,
1406 CY_OFFSET_I2S,
1407 CY_OFFSET_I3C,
1408 CY_OFFSET_KEYSCAN,
1409 CY_OFFSET_LCD,
1410 CY_OFFSET_LIN,
1411 CY_OFFSET_LPCOMP,
1412 CY_OFFSET_LPTIMER,
1413 CY_OFFSET_OPAMP,
1414 CY_OFFSET_PDMPCM,
1415 CY_OFFSET_QSPI,
1416 CY_OFFSET_RTC,
1417 CY_OFFSET_SCB,
1418 CY_OFFSET_SDHC,
1419 CY_OFFSET_SDIODEV,
1420 CY_OFFSET_TCPWM,
1421 CY_OFFSET_TDM,
1422 CY_OFFSET_UDB,
1423 CY_OFFSET_USB,
1424 #elif defined(COMPONENT_CAT2)
1425 CY_OFFSET_ADC,
1426 CY_OFFSET_CAN,
1427 CY_OFFSET_CLOCK,
1428 CY_OFFSET_CRYPTO,
1429 CY_OFFSET_DMA,
1430 CY_OFFSET_GPIO,
1431 CY_OFFSET_I2S,
1432 CY_OFFSET_LCD,
1433 CY_OFFSET_LPCOMP,
1434 CY_OFFSET_LPTIMER,
1435 CY_OFFSET_OPAMP,
1436 CY_OFFSET_SCB,
1437 CY_OFFSET_TCPWM,
1438 CY_OFFSET_USB,
1439 CY_OFFSET_USBPD,
1440 #endif
1441 };
1442
1443 #define _CYHAL_RESOURCES (sizeof(cyhal_resource_offsets)/sizeof(cyhal_resource_offsets[0]))
1444
1445 static const uint32_t cyhal_has_channels =
1446 (1 << CYHAL_RSC_CAN) |
1447 (1 << CYHAL_RSC_CLOCK) |
1448 (1 << CYHAL_RSC_DMA) |
1449 #if defined(COMPONENT_CAT1A) || defined(COMPONENT_CAT1B) || defined(COMPONENT_CAT1C) || defined(COMPONENT_CAT1D)
1450 (1 << CYHAL_RSC_DW) |
1451 (1 << CYHAL_RSC_TDM) |
1452 #endif
1453 (1 << CYHAL_RSC_GPIO) |
1454 (1 << CYHAL_RSC_LPCOMP)|
1455 (1 << CYHAL_RSC_OPAMP) |
1456 (1 << CYHAL_RSC_TCPWM) ;
1457
1458 /*******************************************************************************
1459 * Utility helper functions
1460 *******************************************************************************/
1461
_cyhal_uses_channels(cyhal_resource_t type)1462 static inline uint16_t _cyhal_uses_channels(cyhal_resource_t type)
1463 {
1464 return (cyhal_has_channels & (1 << type)) > 0;
1465 }
1466
_cyhal_get_resource_offset(cyhal_resource_t type)1467 static inline uint16_t _cyhal_get_resource_offset(cyhal_resource_t type)
1468 {
1469 return cyhal_resource_offsets[type];
1470 }
1471
_cyhal_get_block_offsets(cyhal_resource_t type)1472 static inline const _cyhal_hwmgr_offset_t* _cyhal_get_block_offsets(cyhal_resource_t type)
1473 {
1474 switch (type)
1475 {
1476 case CYHAL_RSC_CAN:
1477 return cyhal_block_offsets_can;
1478 case CYHAL_RSC_CLOCK:
1479 return cyhal_block_offsets_clock;
1480 case CYHAL_RSC_DMA:
1481 return cyhal_block_offsets_dma;
1482 #if defined(COMPONENT_CAT1A) || defined(COMPONENT_CAT1B) || defined(COMPONENT_CAT1C) || defined(COMPONENT_CAT1D)
1483 case CYHAL_RSC_DW:
1484 return cyhal_block_offsets_dw;
1485 case CYHAL_RSC_TDM:
1486 return cyhal_block_offsets_tdm;
1487 #endif
1488 case CYHAL_RSC_GPIO:
1489 return cyhal_block_offsets_gpio;
1490 case CYHAL_RSC_LPCOMP:
1491 return cyhal_block_offsets_lpcomp;
1492 case CYHAL_RSC_OPAMP:
1493 return cyhal_block_offsets_opamp;
1494 case CYHAL_RSC_TCPWM:
1495 return cyhal_block_offsets_tcpwm;
1496 default:
1497 CY_ASSERT(false);
1498 return NULL;
1499 }
1500 }
1501
1502 // Gets the number of block offset entries, only valid for blocks which have channels.
_cyhal_get_block_offset_length(cyhal_resource_t type)1503 static inline uint8_t _cyhal_get_block_offset_length(cyhal_resource_t type)
1504 {
1505 switch (type)
1506 {
1507 case CYHAL_RSC_CAN:
1508 return sizeof(cyhal_block_offsets_can)/sizeof(cyhal_block_offsets_can[0]);
1509 case CYHAL_RSC_CLOCK:
1510 return sizeof(cyhal_block_offsets_clock)/sizeof(cyhal_block_offsets_clock[0]);
1511 case CYHAL_RSC_DMA:
1512 return sizeof(cyhal_block_offsets_dma)/sizeof(cyhal_block_offsets_dma[0]);
1513 #if defined(COMPONENT_CAT1A) || defined(COMPONENT_CAT1B) || defined(COMPONENT_CAT1C) || defined(COMPONENT_CAT1D)
1514 case CYHAL_RSC_DW:
1515 return sizeof(cyhal_block_offsets_dw)/sizeof(cyhal_block_offsets_dw[0]);
1516 case CYHAL_RSC_TDM:
1517 return sizeof(cyhal_block_offsets_tdm)/sizeof(cyhal_block_offsets_tdm[0]);
1518 #endif
1519 case CYHAL_RSC_GPIO:
1520 return sizeof(cyhal_block_offsets_gpio)/sizeof(cyhal_block_offsets_gpio[0]);
1521 case CYHAL_RSC_LPCOMP:
1522 return sizeof(cyhal_block_offsets_lpcomp)/sizeof(cyhal_block_offsets_lpcomp[0]);
1523 case CYHAL_RSC_OPAMP:
1524 return sizeof(cyhal_block_offsets_opamp)/sizeof(cyhal_block_offsets_opamp[0]);
1525 case CYHAL_RSC_TCPWM:
1526 return sizeof(cyhal_block_offsets_tcpwm)/sizeof(cyhal_block_offsets_tcpwm[0]);
1527 default:
1528 CY_ASSERT(false);
1529 return 0;
1530 }
1531 }
1532