MCUSW
Pwm.h
Go to the documentation of this file.
1 /*
2 *
3 * Copyright (C) 2023 Texas Instruments Incorporated
4 *
5 * All rights reserved not granted herein.
6 *
7 * Limited License.
8 *
9 * Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive
10 * license under copyrights and patents it now or hereafter owns or controls to make,
11 * have made, use, import, offer to sell and sell ("Utilize") this software subject to the
12 * terms herein. With respect to the foregoing patent license, such license is granted
13 * solely to the extent that any such patent is necessary to Utilize the software alone.
14 * The patent license shall not apply to any combinations which include this software,
15 * other than combinations with devices manufactured by or for TI ("TI Devices").
16 * No hardware patent is licensed hereunder.
17 *
18 * Redistributions must preserve existing copyright notices and reproduce this license
19 * (including the above copyright notice and the disclaimer and (if applicable) source
20 * code license limitations below) in the documentation and/or other materials provided
21 * with the distribution
22 *
23 * Redistribution and use in binary form, without modification, are permitted provided
24 * that the following conditions are met:
25 *
26 * * No reverse engineering, decompilation, or disassembly of this software is
27 * permitted with respect to any software provided in binary form.
28 *
29 * * any redistribution and use are licensed by TI for use only with TI Devices.
30 *
31 * * Nothing shall obligate TI to provide you with source code for the software
32 * licensed and provided to you in object code.
33 *
34 * If software source code is provided to you, modification and redistribution of the
35 * source code are permitted provided that the following conditions are met:
36 *
37 * * any redistribution and use of the source code, including any resulting derivative
38 * works, are licensed by TI for use only with TI Devices.
39 *
40 * * any redistribution and use of any object code compiled from the source code
41 * and any resulting derivative works, are licensed by TI for use only with TI Devices.
42 *
43 * Neither the name of Texas Instruments Incorporated nor the names of its suppliers
44 *
45 * may be used to endorse or promote products derived from this software without
46 * specific prior written permission.
47 *
48 * DISCLAIMER.
49 *
50 * THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "AS IS" AND ANY EXPRESS
51 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
52 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
53 * IN NO EVENT SHALL TI AND TI'S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT,
54 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
55 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
56 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
57 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
58 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
59 * OF THE POSSIBILITY OF SUCH DAMAGE.
60 *
61 */
62 
84  /*
85  * Below are the global requirements which are met by this PWM
86  * driver which can't be mapped to a particular source ID
87  */
88  /*
89  * Design: MCAL-6809,MCAL-7617,MCAL-6772,MCAL-7638,MCAL-6808,MCAL-7571,MCAL-6845,MCAL-7625,MCAL-6826,MCAl-7536,MCAL-6820,MCAL-7570,MCAL-6778,MCAL-7613
90  */
91 
92 /*
93  * Below are the PWM module's environment requirements which can't be mapped
94  * to this driver
95  */
96  /*
97  * Design: MCAL-6806,MCAL-7610,MCAL-6834,MCAL-7565,MCAL-6837,MCAL-7561
98  */
99 #ifndef PWM_H
100 #define PWM_H
101 
102 /* ========================================================================== */
103 /* Include Files */
104 /* ========================================================================== */
105 /*
106  * Design: MCAL-6888,MCAL-7551,MCAL-6824,MCAL-7572
107  */
108 #include "Std_Types.h"
109 #include "Pwm_Cfg.h"
110 
111 #ifdef __cplusplus
112 extern "C"
113 {
114 #endif
115 
116 /* ========================================================================== */
117 /* Macros & Typedefs */
118 /* ========================================================================== */
126 #define PWM_SW_MAJOR_VERSION (3U)
127 
128 #define PWM_SW_MINOR_VERSION (0U)
129 
130 #define PWM_SW_PATCH_VERSION (0U)
131 /* @} */
132 
133 
134 
142 #define PWM_AR_RELEASE_MAJOR_VERSION (4U)
143 
144 #define PWM_AR_RELEASE_MINOR_VERSION (3U)
145 
146 #define PWM_AR_RELEASE_REVISION_VERSION (1U)
147 /* @} */
148 
154 #define PWM_VENDOR_ID ((uint16) 44U)
155 
156 #define PWM_MODULE_ID ((uint16) 121U)
157 
165 /*
166  * Design: MCAL-6847,MCAL-7527
167  */
168 
170 #ifndef PWM_E_INIT_FAILED
171 #define PWM_E_INIT_FAILED ((uint8)(0x10U))
172 #endif
173 
174 /*
175  * Design: MCAL-6833,MCAL-7611
176  */
177 
179 #ifndef PWM_E_UNINIT
180 #define PWM_E_UNINIT ((uint8)(0x11U))
181 #endif
182 
183 /*
184 * Design: MCAL-6872,MCAL-7523
185 */
186 
187 
189 #ifndef PWM_E_PARAM_CHANNEL
190 #define PWM_E_PARAM_CHANNEL ((uint8)(0x12U))
191 #endif
192 
193 /*
194  * Design: MCAL-6802,MCAL-7616
195  */
196 
198 #ifndef PWM_E_PERIOD_UNCHANGEABLE
199 #define PWM_E_PERIOD_UNCHANGEABLE ((uint8)(0x13U))
200 #endif
201 
202 /*
203  * Design: MCAL-6856,MCAL-7574
204  */
206 #ifndef PWM_E_ALREADY_INITIALIZED
207 #define PWM_E_ALREADY_INITIALIZED ((uint8)(0x14U))
208 #endif
209 
210 /*
211  * Design: MCAL-6847,MCAL-7527
212  */
214 #ifndef PWM_E_PARAM_POINTER
215 #define PWM_E_PARAM_POINTER ((uint8)(0x15U))
216 #endif
217 
218 /*
219  * Design: MCAL-6879,MCAL-7529
220  */
223 #ifndef PWM_E_NOT_DISENGAGED
224 #define PWM_E_NOT_DISENGAGED ((uint8)(0x16U))
225 #endif
226 /* @} */
227 
236 #define PWM_SID_INIT ((uint8)(0x0U))
237 
238 #define PWM_SID_DEINIT ((uint8)(0x1U))
239 
240 #define PWM_SID_SET_DUTY_CYCLE ((uint8)(0x2U))
241 
242 #define PWM_SID_SET_PERIOD_AND_DUTY ((uint8)(0x3U))
243 
244 #define PWM_SID_SET_OUTPUT_TO_IDLE ((uint8)(0x4U))
245 
246 #define PWM_SID_GET_OUTPUT_STATE ((uint8)(0x5U))
247 
248 #define PWM_SID_DISABLE_NOTIFICATION ((uint8)(0x6U))
249 
250 #define PWM_SID_ENABLE_NOTIFICATION ((uint8)(0x7U))
251 
252 #define PWM_SID_GET_VERSION_INFO ((uint8)(0x8U))
253 
254 #define PWM_SID_REGISTER_READBACK ((uint8)(0xDU))
255 /* @} */
256 
264 #define PWM_STATUS_UNINIT ((uint8)(0U))
265 
266 #define PWM_STATUS_INIT ((uint8)(1U))
267 
268 /* @} */
269 
270  /*
271  * Design: MCAL-6801,MCAL-7544,MCAL-6880,MCAL-7547
272  */
273 /* Design MCAL-6880,MCAL-7547 states that PWM module shall comply below duty cycle scheme
274  * - 0x0000 means 0%.
275  * - 0x8000 means 100%.
276  * 0x8000 gives the highest resolution while allowing 100% duty cycle
277  * to be represented with a 16 bit value
278  */
280 #define PWM_DUTY_0_PERCENT (0x0U)
281 
282 #define PWM_DUTY_100_PERCENT (0x8000U)
283 
284 #define PWM_DUTY_50_PERCENT (0x4000U)
285 
286 
287 
288 
289 /* ========================================================================== */
290 /* Structures and Enums */
291 /* ========================================================================== */
292 
297 /*
298  * Design: MCAL-6775,MCAL-7543
299  */
301 typedef enum
302 {
303  PWM_LOW = 0U,
308 
309  /*
310  * Design: MCAL-6836,MCAL-7576
311  */
313 typedef enum
314 {
322 
323 /*
324  * Design: MCAL-6763,MCAL-7587
325  */
327 typedef uint32 Pwm_PeriodType;
328 
329 /*
330  * Design: MCAL-6883,MCAL-7505
331  */
333 typedef uint32 Pwm_ChannelType;
334 
336 typedef uint32 Pwm_FrequencyType;
337 
338 /*
339  * Design: MCAL-6796,MCAL-7589,MCAL-7597
340  */
346 typedef enum
347 {
355 
357 typedef enum Pwm_epwmOutputCh
358 {
366 
368 typedef void (*Pwm_NotifyFuncType)(void);
370 typedef struct
371 {
373 #ifdef PWM_USE_EPWM
374  uint32 outputCh;
376 #endif /* PWM_USE_EPWM*/
378 
380 typedef struct Pwm_ConfigType_PC_s
381 {
385 
386 
388 typedef struct
389 {
392  uint16 dutyCycle;
394  uint32 hwPeriod;
402  uint32 prescale;
414 #ifdef PWM_USE_EPWM
415  uint32 hsPrescale;
427  boolean enableHR;
429 #endif /*PWM_USE_EPWM*/
430 #if (PWM_NOTIFICATION_SUPPORTED == STD_ON)
433 #endif
435 
436 /*
437  * Design: MCAL-6885,MCAL-7533,MCAL-6799,MCAL-7535
438  */
440 typedef struct Pwm_ConfigType_s
441 {
445 
446 #if (STD_ON == PWM_REGISTER_READBACK_API)
447 
450 typedef struct
451 {
452 #ifdef PWM_USE_GPT
453  /*
454  * GPT related registers
455  */
456  uint32 pwmRev;
458  uint32 pwmTtgr;
460  uint32 pwmTimerSynCtrl;
462 #endif
463  /*
464  * EPWM related registers
465  */
466 #ifdef PWM_USE_EPWM
467  uint16 pwmTbCtl;
469  uint16 pwmTbPhs;
471  uint16 pwmTbCnt;
473  uint16 pwmAqCtlA;
475  uint16 pwmAqCtlB;
477  uint16 pwmDbCtl;
479  uint16 pwmTzSel;
481  uint16 pwmTzCtl;
483  uint16 pwmPcCtl;
485  uint16 pwmTbsts;
487  uint16 pwmTbprd;
489  uint16 pwmAqsfrc;
491  uint16 pwmAqcsfrc;
492  /* < Action Qualifier Continuous Software Force Register */
493  uint16 pwmDbred;
494  /* < Dead Band Generator Rising Edge Delay Count Register */
495  uint16 pwmDbfed;
496  /* < Dead Band Generator Falling Edge Delay Count Register */
497  uint16 pwmEtsel;
498  /* < Event Trigger Selection Registe */
499 
500 #endif
502 
503 
504 #endif /* #if (STD_ON == PWM_REGISTER_READBACK_API) */
505 
506 /* @} */
507 
508 /* ========================================================================== */
509 /* Function Declarations */
510 /* ========================================================================== */
511 
531 FUNC(void, PWM_CODE) Pwm_Init(
532  P2CONST(Pwm_ConfigType, AUTOMATIC, PWM_PBCFG) CfgPtr);
533 
534 #if (STD_ON == PWM_DEINIT_API)
535 
554 FUNC(void, PWM_CODE) Pwm_DeInit(void);
555 #endif
556 
557 #if (STD_ON == PWM_SET_DUTY_CYCLE_API)
558 
580 FUNC(void, PWM_CODE) Pwm_SetDutyCycle(
581  Pwm_ChannelType ChannelNumber, uint16 DutyCycle);
582 #endif
583 
584 #if (STD_ON == PWM_SET_PERIOD_AND_DUTY_API)
585 
608 FUNC(void, PWM_CODE) Pwm_SetPeriodAndDuty(
609  Pwm_ChannelType ChannelNumber, Pwm_PeriodType Period, uint16 DutyCycle);
610 #endif
611 
612 #if (STD_ON == PWM_SET_OUTPUT_TO_IDLE_API)
613 
632 FUNC(void, PWM_CODE) Pwm_SetOutputToIdle(Pwm_ChannelType ChannelNumber);
633 #endif
634 
635 #if (STD_ON == PWM_NOTIFICATION_SUPPORTED)
636 
655 FUNC(void, PWM_CODE) Pwm_DisableNotification(Pwm_ChannelType ChannelNumber);
656 #endif
657 
658 #if (STD_ON == PWM_NOTIFICATION_SUPPORTED)
659 
680 FUNC(void, PWM_CODE) Pwm_EnableNotification(
681  Pwm_ChannelType ChannelNumber, Pwm_EdgeNotificationType Notification);
682 #endif
683 
684 #if (STD_ON == PWM_VERSION_INFO_API)
685 
704 FUNC(void, PWM_CODE) Pwm_GetVersionInfo(
705  P2VAR(Std_VersionInfoType, AUTOMATIC, PWM_APPL_DATA) versioninfo);
706 #endif
707 
708 #if(STD_ON == PWM_REGISTER_READBACK_API)
709 
731 Std_ReturnType Pwm_RegisterReadback(
732  Pwm_ChannelType ChannelNumber, Pwm_RegisterReadbackType *RegRbPtr);
733 #endif
734 
735 #ifdef __cplusplus
736 }
737 #endif
738 
739 #endif /* #ifndef PWM_H_ */
740 
741 /* @} */
Definition: Pwm.h:303
Definition: Pwm.h:319
Definition: Pwm.h:361
Pwm_OutputStateType idleState
Definition: Pwm.h:398
Pwm configuration structure.
Definition: Pwm.h:440
PWM register readback structure.
Definition: Pwm.h:450
Definition: Pwm.h:352
Std_ReturnType Pwm_RegisterReadback(Pwm_ChannelType ChannelNumber, Pwm_RegisterReadbackType *RegRbPtr)
This function reads the important registers of the hardware unit and returns the value in the structu...
Definition: Pwm.h:317
Definition: Pwm.h:363
uint32 Pwm_FrequencyType
typedef of frequency value (Frequency in Hz)
Definition: Pwm.h:336
Definition: Pwm.h:305
Pwm_epwmOutputCh_t
EPWM outputs in a single epwm channel.
Definition: Pwm.h:357
Pwm_ChannelClassType
Period type for pwm channels. Fixed periods prohibit changes to the period length with Pwm_SetPeriod(...
Definition: Pwm.h:346
void Pwm_Init(const Pwm_ConfigType *CfgPtr)
Service for PWM initialization.
Pwm_EdgeNotificationType
Possible edge notification.
Definition: Pwm.h:313
Pwm_ChannelClassType channelClass
Definition: Pwm.h:400
void Pwm_EnableNotification(Pwm_ChannelType ChannelNumber, Pwm_EdgeNotificationType Notification)
Service to enable the Edge Notification.
uint32 hwPeriod
Definition: Pwm.h:394
Pwm_OutputStateType
Possible output states of a PWM channel.
Definition: Pwm.h:301
void Pwm_DeInit(void)
Service for PWM de-initialization.
uint32 Pwm_PeriodType
typedef of period value
Definition: Pwm.h:327
void Pwm_SetPeriodAndDuty(Pwm_ChannelType ChannelNumber, Pwm_PeriodType Period, uint16 DutyCycle)
Service for setting Period and Duty Cycle.
uint32 Pwm_ChannelType
PWM Channel type.
Definition: Pwm.h:333
Pwm_ChannelType channelId
Definition: Pwm.h:372
Definition: Pwm.h:350
void Pwm_SetOutputToIdle(Pwm_ChannelType ChannelNumber)
Service to set the output of a channel immediately to idle.
This file contains generated pre compile configuration file for PWM MCAL driver.
Pwm channel configuration.
Definition: Pwm.h:388
#define PWM_NUM_CHANNELS
Number of configured channels.
Definition: Pwm_Cfg.h:132
Pwm_OutputStateType polarity
Definition: Pwm.h:396
Definition: Pwm.h:348
Definition: Pwm.h:315
void Pwm_DisableNotification(Pwm_ChannelType ChannelNumber)
Service to disable the Edge Notification.
uint32 prescale
Definition: Pwm.h:402
void(* Pwm_NotifyFuncType)(void)
Notification callback function pointer.
Definition: Pwm.h:368
Pwm channel configuration.
Definition: Pwm.h:370
Definition: Pwm.h:359
uint16 dutyCycle
Definition: Pwm.h:392
void Pwm_SetDutyCycle(Pwm_ChannelType ChannelNumber, uint16 DutyCycle)
Service for setting Duty Cycle.
uint32 instanceClkHz
Definition: Pwm.h:390
void Pwm_GetVersionInfo(Std_VersionInfoType *versioninfo)
This service returns the version information of this module.
Pwm configuration structure.
Definition: Pwm.h:380
Pwm_NotifyFuncType notificationHandler
Definition: Pwm.h:431