1 /******************************************************************************
2  *
3  * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by
4  * Analog Devices, Inc.),
5  * Copyright (C) 2023-2024 Analog Devices, Inc.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  ******************************************************************************/
20 
21 /* **** Includes **** */
22 #include <stddef.h>
23 #include "mxc_errors.h"
24 #include "mxc_sys.h"
25 #include "gpio.h"
26 #include "pt.h"
27 #include "pt_reva.h"
28 
29 /* ************************************************************************* */
MXC_PT_Init(mxc_ptg_regs_t * ptg,mxc_clk_scale_t clk_scale)30 void MXC_PT_Init(mxc_ptg_regs_t *ptg, mxc_clk_scale_t clk_scale)
31 {
32     MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_PT);
33     MXC_SYS_Reset_Periph(MXC_SYS_RESET_PT);
34 
35     MXC_PT_RevA_Init((mxc_ptg_reva_regs_t *)ptg, clk_scale);
36 }
37 
38 /* ************************************************************************* */
MXC_PT_Shutdown(mxc_ptg_regs_t * ptg,uint32_t pts)39 void MXC_PT_Shutdown(mxc_ptg_regs_t *ptg, uint32_t pts)
40 {
41     MXC_PT_RevA_Shutdown((mxc_ptg_reva_regs_t *)ptg, pts);
42     MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_PT);
43 }
44 
45 /* ************************************************************************* */
MXC_PT_Config(mxc_ptg_regs_t * ptg,mxc_pt_cfg_t * cfg)46 int MXC_PT_Config(mxc_ptg_regs_t *ptg, mxc_pt_cfg_t *cfg)
47 {
48     if (cfg->outputSelect) {
49         switch (cfg->channel) {
50         case 0:
51             MXC_GPIO_Config(&gpio_cfg_pt0_1);
52             break;
53         case 1:
54             MXC_GPIO_Config(&gpio_cfg_pt1_1);
55             break;
56         case 2:
57             MXC_GPIO_Config(&gpio_cfg_pt2_1);
58             break;
59         case 3:
60             MXC_GPIO_Config(&gpio_cfg_pt3_1);
61             break;
62         case 4:
63             MXC_GPIO_Config(&gpio_cfg_pt4_1);
64             break;
65         case 5:
66             MXC_GPIO_Config(&gpio_cfg_pt5_1);
67             break;
68         case 6:
69             MXC_GPIO_Config(&gpio_cfg_pt6_1);
70             break;
71         case 7:
72             MXC_GPIO_Config(&gpio_cfg_pt7_1);
73             break;
74         case 8:
75             MXC_GPIO_Config(&gpio_cfg_pt8_1);
76             break;
77         case 9:
78             MXC_GPIO_Config(&gpio_cfg_pt9_1);
79             break;
80         case 10:
81             MXC_GPIO_Config(&gpio_cfg_pt10_1);
82             break;
83         case 11:
84             MXC_GPIO_Config(&gpio_cfg_pt11_1);
85             break;
86         case 12:
87             MXC_GPIO_Config(&gpio_cfg_pt12_1);
88             break;
89         case 13:
90             MXC_GPIO_Config(&gpio_cfg_pt13_1);
91             break;
92         case 14:
93             MXC_GPIO_Config(&gpio_cfg_pt14_1);
94             break;
95         case 15:
96             MXC_GPIO_Config(&gpio_cfg_pt15_1);
97             break;
98         default:
99             return E_BAD_PARAM;
100         }
101     } else {
102         switch (cfg->channel) {
103         case 0:
104             MXC_GPIO_Config(&gpio_cfg_pt0_0);
105             break;
106         case 1:
107             MXC_GPIO_Config(&gpio_cfg_pt1_0);
108             break;
109         case 2:
110             MXC_GPIO_Config(&gpio_cfg_pt2_0);
111             break;
112         case 3:
113             MXC_GPIO_Config(&gpio_cfg_pt3_0);
114             break;
115         case 4:
116             MXC_GPIO_Config(&gpio_cfg_pt4_0);
117             break;
118         case 5:
119             MXC_GPIO_Config(&gpio_cfg_pt5_0);
120             break;
121         case 6:
122             MXC_GPIO_Config(&gpio_cfg_pt6_0);
123             break;
124         case 7:
125             MXC_GPIO_Config(&gpio_cfg_pt7_0);
126             break;
127         case 8:
128             MXC_GPIO_Config(&gpio_cfg_pt8_0);
129             break;
130         case 9:
131             MXC_GPIO_Config(&gpio_cfg_pt9_0);
132             break;
133         case 10:
134             MXC_GPIO_Config(&gpio_cfg_pt10_0);
135             break;
136         case 11:
137             MXC_GPIO_Config(&gpio_cfg_pt11_0);
138             break;
139         case 12:
140             MXC_GPIO_Config(&gpio_cfg_pt12_0);
141             break;
142         case 13:
143             MXC_GPIO_Config(&gpio_cfg_pt13_0);
144             break;
145         case 14:
146             MXC_GPIO_Config(&gpio_cfg_pt14_0);
147             break;
148         case 15:
149             MXC_GPIO_Config(&gpio_cfg_pt15_0);
150             break;
151         default:
152             return E_BAD_PARAM;
153         }
154     }
155 
156     return MXC_PT_RevA_Config((mxc_ptg_reva_regs_t *)ptg, cfg);
157 }
158 
159 /* ************************************************************************* */
MXC_PT_SqrWaveConfig(mxc_ptg_regs_t * ptg,unsigned channel,uint32_t freq,uint8_t outputSelect)160 int MXC_PT_SqrWaveConfig(mxc_ptg_regs_t *ptg, unsigned channel, uint32_t freq, uint8_t outputSelect)
161 {
162     mxc_pt_cfg_t sqwcfg;
163     sqwcfg.outputSelect = (!!outputSelect);
164 
165     MXC_PT_RevA_SqrWaveConfig((mxc_ptg_reva_regs_t *)ptg, &sqwcfg, channel, freq);
166     return MXC_PT_Config(ptg, &sqwcfg);
167 }
168 
169 /* ************************************************************************* */
MXC_PT_Start(mxc_ptg_regs_t * ptg,unsigned pts)170 void MXC_PT_Start(mxc_ptg_regs_t *ptg, unsigned pts)
171 {
172     MXC_PT_RevA_Start((mxc_ptg_reva_regs_t *)ptg, pts);
173 }
174 
175 /* ************************************************************************* */
MXC_PT_Stop(mxc_ptg_regs_t * ptg,unsigned pts)176 void MXC_PT_Stop(mxc_ptg_regs_t *ptg, unsigned pts)
177 {
178     MXC_PT_RevA_Stop((mxc_ptg_reva_regs_t *)ptg, pts);
179 }
180 
181 /* ************************************************************************* */
MXC_PT_IsActive(mxc_ptg_regs_t * ptg,uint32_t pts)182 uint32_t MXC_PT_IsActive(mxc_ptg_regs_t *ptg, uint32_t pts)
183 {
184     return MXC_PT_RevA_IsActive((mxc_ptg_reva_regs_t *)ptg, pts);
185 }
186 
187 /* ************************************************************************* */
MXC_PT_SetPattern(unsigned pts,uint32_t pattern)188 void MXC_PT_SetPattern(unsigned pts, uint32_t pattern)
189 {
190     MXC_PT_RevA_SetPattern(pts, pattern);
191 }
192 
193 /* ************************************************************************* */
MXC_PT_EnableInt(mxc_ptg_regs_t * ptg,uint32_t pts)194 void MXC_PT_EnableInt(mxc_ptg_regs_t *ptg, uint32_t pts)
195 {
196     MXC_PT_RevA_EnableInt((mxc_ptg_reva_regs_t *)ptg, pts);
197 }
198 
199 /* ************************************************************************* */
MXC_PT_DisableInt(mxc_ptg_regs_t * ptg,uint32_t pts)200 void MXC_PT_DisableInt(mxc_ptg_regs_t *ptg, uint32_t pts)
201 {
202     MXC_PT_RevA_DisableInt((mxc_ptg_reva_regs_t *)ptg, pts);
203 }
204 
205 /* ************************************************************************* */
MXC_PT_GetFlags(mxc_ptg_regs_t * ptg)206 uint32_t MXC_PT_GetFlags(mxc_ptg_regs_t *ptg)
207 {
208     return MXC_PT_RevA_GetFlags((mxc_ptg_reva_regs_t *)ptg);
209 }
210 
211 /* ************************************************************************* */
MXC_PT_ClearFlags(mxc_ptg_regs_t * ptg,uint32_t flags)212 void MXC_PT_ClearFlags(mxc_ptg_regs_t *ptg, uint32_t flags)
213 {
214     MXC_PT_RevA_ClearFlags((mxc_ptg_reva_regs_t *)ptg, flags);
215 }
216 
217 /* ************************************************************************* */
MXC_PT_EnableRestart(unsigned start,unsigned stop,uint8_t restartIndex)218 void MXC_PT_EnableRestart(unsigned start, unsigned stop, uint8_t restartIndex)
219 {
220     MXC_PT_RevA_EnableRestart(start, stop, restartIndex);
221 }
222 
223 /* ************************************************************************* */
MXC_PT_DisableRestart(unsigned channel,uint8_t restartIndex)224 void MXC_PT_DisableRestart(unsigned channel, uint8_t restartIndex)
225 {
226     MXC_PT_RevA_DisableRestart(channel, restartIndex);
227 }
228 
229 /* ************************************************************************* */
MXC_PT_Resync(mxc_ptg_regs_t * ptg,uint32_t pts)230 void MXC_PT_Resync(mxc_ptg_regs_t *ptg, uint32_t pts)
231 {
232     MXC_PT_RevA_Resync((mxc_ptg_reva_regs_t *)ptg, pts);
233 }
234