MCUSW
Loading...
Searching...
No Matches
Pwm.h
Go to the documentation of this file.
1/*
2*
3* Copyright (C) 2024 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
112extern "C"
113{
114#endif
115
116/* ========================================================================== */
117/* Macros & Typedefs */
118/* ========================================================================== */
126#define PWM_SW_MAJOR_VERSION (10U)
128#define PWM_SW_MINOR_VERSION (2U)
130#define PWM_SW_PATCH_VERSION (0U)
131/* @} */
132
133
134
142#define PWM_AR_RELEASE_MAJOR_VERSION (4U)
144#define PWM_AR_RELEASE_MINOR_VERSION (3U)
146#define PWM_AR_RELEASE_REVISION_VERSION (1U)
147/* @} */
148
154#define PWM_VENDOR_ID ((uint16) 44U)
156#define PWM_MODULE_ID ((uint16) 121U)
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))
238#define PWM_SID_DEINIT ((uint8)(0x1U))
240#define PWM_SID_SET_DUTY_CYCLE ((uint8)(0x2U))
242#define PWM_SID_SET_PERIOD_AND_DUTY ((uint8)(0x3U))
244#define PWM_SID_SET_OUTPUT_TO_IDLE ((uint8)(0x4U))
246#define PWM_SID_GET_OUTPUT_STATE ((uint8)(0x5U))
248#define PWM_SID_DISABLE_NOTIFICATION ((uint8)(0x6U))
250#define PWM_SID_ENABLE_NOTIFICATION ((uint8)(0x7U))
252#define PWM_SID_GET_VERSION_INFO ((uint8)(0x8U))
254#define PWM_SID_REGISTER_READBACK ((uint8)(0xDU))
255/* @} */
256
264#define PWM_STATUS_UNINIT ((uint8)(0U))
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)
282#define PWM_DUTY_100_PERCENT (0x8000U)
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 */
301typedef enum
302{
303 PWM_LOW = 0U,
308
309 /*
310 * Design: MCAL-6836,MCAL-7576
311 */
313typedef enum
314{
315 PWM_RISING_EDGE = 1U,
317 PWM_FALLING_EDGE = 2U,
319 PWM_BOTH_EDGES = 3U
322
323/*
324 * Design: MCAL-6763,MCAL-7587
325 */
327typedef uint32 Pwm_PeriodType;
328
329/*
330 * Design: MCAL-6883,MCAL-7505
331 */
333typedef uint32 Pwm_ChannelType;
334
336typedef uint32 Pwm_FrequencyType;
337
338/*
339 * Design: MCAL-6796,MCAL-7589,MCAL-7597
340 */
355
357typedef enum Pwm_epwmOutputCh
358{
359 EPWM_OUTPUT_CH_A = 0U,
361 EPWM_OUTPUT_CH_B = 1U,
366
368typedef void (*Pwm_NotifyFuncType)(void);
370typedef struct
371{
373#ifdef PWM_USE_EPWM
374 uint32 outputCh;
376#endif /* PWM_USE_EPWM*/
378
380typedef struct Pwm_ConfigType_PC_s
381{
385
386
388typedef 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 */
440typedef struct Pwm_ConfigType_s
441{
445
446#if (STD_ON == PWM_REGISTER_READBACK_API)
450typedef 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
531FUNC(void, PWM_CODE) Pwm_Init(
532 P2CONST(Pwm_ConfigType, AUTOMATIC, PWM_PBCFG) CfgPtr);
533
534#if (STD_ON == PWM_DEINIT_API)
554FUNC(void, PWM_CODE) Pwm_DeInit(void);
555#endif
556
557#if (STD_ON == PWM_SET_DUTY_CYCLE_API)
580FUNC(void, PWM_CODE) Pwm_SetDutyCycle(
581 Pwm_ChannelType ChannelNumber, uint16 DutyCycle);
582#endif
583
584#if (STD_ON == PWM_SET_PERIOD_AND_DUTY_API)
608FUNC(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)
632FUNC(void, PWM_CODE) Pwm_SetOutputToIdle(Pwm_ChannelType ChannelNumber);
633#endif
634
635#if (STD_ON == PWM_GET_OUTPUT_STATE_API)
636 /* Function not implmented due to hardware limitation
637 Dummy Function*/
639 Pwm_ChannelType ChannelNumber);
640#endif
641
642#if (STD_ON == PWM_NOTIFICATION_SUPPORTED)
662FUNC(void, PWM_CODE) Pwm_DisableNotification(Pwm_ChannelType ChannelNumber);
663#endif
664
665#if (STD_ON == PWM_NOTIFICATION_SUPPORTED)
687FUNC(void, PWM_CODE) Pwm_EnableNotification(
688 Pwm_ChannelType ChannelNumber, Pwm_EdgeNotificationType Notification);
689#endif
690
691#if (STD_ON == PWM_VERSION_INFO_API)
711FUNC(void, PWM_CODE) Pwm_GetVersionInfo(
712 P2VAR(Std_VersionInfoType, AUTOMATIC, PWM_APPL_DATA) versioninfo);
713#endif
714
715#if(STD_ON == PWM_REGISTER_READBACK_API)
738Std_ReturnType Pwm_RegisterReadback(
739 Pwm_ChannelType ChannelNumber, Pwm_RegisterReadbackType *RegRbPtr);
740#endif
741
742#ifdef __cplusplus
743}
744#endif
745
746#endif /* #ifndef PWM_H_ */
747
748/* @} */
Pwm_ChannelClassType
Period type for pwm channels. Fixed periods prohibit changes to the period length with Pwm_SetPeriod(...
Definition Pwm.h:347
Pwm_OutputStateType
Possible output states of a PWM channel.
Definition Pwm.h:302
void Pwm_SetOutputToIdle(Pwm_ChannelType ChannelNumber)
Service to set the output of a channel immediately to idle.
void Pwm_EnableNotification(Pwm_ChannelType ChannelNumber, Pwm_EdgeNotificationType Notification)
Service to enable the Edge Notification.
void Pwm_GetVersionInfo(Std_VersionInfoType *versioninfo)
This service returns the version information of this module.
uint32 Pwm_FrequencyType
typedef of frequency value (Frequency in Hz)
Definition Pwm.h:336
uint32 Pwm_PeriodType
typedef of period value
Definition Pwm.h:327
Pwm_OutputStateType Pwm_GetOutputState(Pwm_ChannelType ChannelNumber)
uint32 Pwm_ChannelType
PWM Channel type.
Definition Pwm.h:333
void Pwm_SetDutyCycle(Pwm_ChannelType ChannelNumber, uint16 DutyCycle)
Service for setting Duty Cycle.
void Pwm_SetPeriodAndDuty(Pwm_ChannelType ChannelNumber, Pwm_PeriodType Period, uint16 DutyCycle)
Service for setting Period and Duty Cycle.
Pwm_epwmOutputCh_t
EPWM outputs in a single epwm channel.
Definition Pwm.h:358
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...
Pwm_EdgeNotificationType
Possible edge notification
Definition Pwm.h:314
void Pwm_DisableNotification(Pwm_ChannelType ChannelNumber)
Service to disable the Edge Notification.
void Pwm_DeInit(void)
Service for PWM de-initialization.
void(* Pwm_NotifyFuncType)(void)
Notification callback function pointer
Definition Pwm.h:368
void Pwm_Init(const Pwm_ConfigType *CfgPtr)
Service for PWM initialization.
uint16 dutyCycle
Definition Pwm.h:392
Pwm_OutputStateType idleState
Definition Pwm.h:398
Pwm_ChannelType channelId
Definition Pwm.h:372
Pwm_NotifyFuncType notificationHandler
Definition Pwm.h:431
#define PWM_NUM_CHANNELS
Number of configured channels.
Definition config/Pwm_Demo_Cfg/output/generated/soc/j721e/mcu1_0/include/Pwm_Cfg.h:150
Pwm_OutputStateType polarity
Definition Pwm.h:396
uint32 instanceClkHz
Definition Pwm.h:390
uint32 prescale
Definition Pwm.h:402
uint32 hwPeriod
Definition Pwm.h:394
Pwm_ChannelClassType channelClass
Definition Pwm.h:400
@ PWM_VARIABLE_PERIOD
Definition Pwm.h:352
@ PWM_FIXED_PERIOD
Definition Pwm.h:348
@ PWM_FIXED_PERIOD_SHIFTED
Definition Pwm.h:350
@ PWM_LOW
Definition Pwm.h:303
@ PWM_HIGH
Definition Pwm.h:305
@ EPWM_OUTPUT_CH_A
Definition Pwm.h:359
@ EPWM_OUTPUT_CH_BOTH_A_AND_B
Definition Pwm.h:363
@ EPWM_OUTPUT_CH_B
Definition Pwm.h:361
@ PWM_RISING_EDGE
Definition Pwm.h:315
@ PWM_FALLING_EDGE
Definition Pwm.h:317
@ PWM_BOTH_EDGES
Definition Pwm.h:319
Pwm channel configuration.
Definition Pwm.h:371
Pwm channel configuration.
Definition Pwm.h:389
Pwm configuration structure.
Definition Pwm.h:381
Pwm configuration structure.
Definition Pwm.h:441
PWM register readback structure.
Definition Pwm.h:451