CCU8PWMLIBApp
|
00001 /****************************************************************************** 00002 * 00003 * Copyright (C) 2011 Infineon Technologies AG. All rights reserved. 00004 * 00005 * Infineon Technologies AG (Infineon) is supplying this software for use with 00006 * Infineon's microcontrollers. 00007 * This file can be freely distributed within development tools that are 00008 * supporting such microcontrollers. 00009 * 00010 * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED 00011 * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF 00012 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. 00013 * INFINEON SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, 00014 * OR CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. 00015 * 00016 ******************************************************************************** 00017 ** ** 00018 ** ** 00019 ** PLATFORM : Infineon XMC4000 Series ** 00020 ** ** 00021 ** COMPILER : Compiler Independent ** 00022 ** ** 00023 ** AUTHOR : App Developer ** 00024 ** ** 00025 ** MAY BE CHANGED BY USER [yes/no]: Yes ** 00026 ** ** 00027 ** MODIFICATION DATE : Nov 01, 2012 ** 00028 ** ** 00029 *******************************************************************************/ 00030 00031 /******************************************************************************* 00032 ** Author(s) Identity ** 00033 ******************************************************************************** 00034 ** ** 00035 ** Initials Name ** 00036 ** ---------------------------------------------------------------------------** 00037 ** KS App Developer ** 00038 *******************************************************************************/ 00039 00050 #ifndef CCU8PWMLIB_H_ 00051 #define CCU8PWMLIB_H_ 00052 /******************************************************************************* 00053 ** Include Files ** 00054 *******************************************************************************/ 00055 #include <DAVE3.h> 00056 00057 00062 /******************************************************************************* 00063 ** Global Macro Definitions ** 00064 *******************************************************************************/ 00065 00066 /*<<<DD_CCU8PWMLIB_MACRO_1>>>*/ 00068 #define CCU8PWMLIB_EVENT_0 0x01U 00069 00070 /*<<<DD_CCU8PWMLIB_MACRO_2>>>*/ 00072 #define CCU8PWMLIB_EVENT_1 0x02U 00073 00074 /*<<<DD_CCU8PWMLIB_MACRO_3>>>*/ 00076 #define CCU8PWMLIB_EVENT_2 0x03U 00077 00078 /*<<<DD_CCU8PWMLIB_MACRO_4>>>*/ 00080 #define CCU8PWMLIB_ACTIVE_LOW 0x00U 00081 00082 /*<<<DD_CCU8PWMLIB_MACRO_5>>>*/ 00084 #define CCU8PWMLIB_ACTIVE_HIGH 0x01U 00085 00086 /*<<<DD_CCU8PWMLIB_MACRO_6>>>*/ 00088 #define CCU8PWMLIB_ALL_CCU8_INTR_CLEAR 0x00000F3FU 00089 00090 /*<<<DD_CCU8PWMLIB_MACRO_7>>>*/ 00092 #define CCU8PWMLIB_SLICE_CLEAR 0x07U 00093 00094 /*<<<DD_CCU8PWMLIB_MACRO_8>>>*/ 00096 #define CCU8PWMLIB_LPF 0x0U 00097 00098 /*<<<DD_CCU8PWMLIBD_MACRO_9>>>*/ 00101 #define CCU8PWMLIB_COUNT(PwmTime, Res) (uint32_t)(PwmTime/Res) 00102 00103 /*<<<DD_CCU8PWMLIB_MACRO_10>>>*/ 00105 #define CCU8PWMLIB_EDGE_PERIOD_VAL(count) (uint32_t)(count -1U) 00106 00107 /*<<<DD_CCU8PWMLIB_MACRO_11>>>*/ 00109 #define CCU8PWMLIB_CENTER_PERIOD_VAL(count) (uint32_t)((count <<1U) -1U ) 00110 00112 #define CCU8PWMLIB_COMPARE_MODE 0x00U 00113 00114 #define CCU8PWMLIB_EVENT2_INTERRUPT 0xAU 00115 00116 #define CCU8PWMLIB_TRAP_FLAG_CLEAR 0xBU 00117 00118 #define CCU8PWMLIB_MAX_VALUE 65535UL 00119 00120 #define CCU8PWMLIB_TC_MAX_VALUE 0xFFFFFFFFUL 00121 00122 typedef status_t (*CCU8PWMLIB_SetCompareFuncionPtr)(const void*, uint32_t, uint32_t); 00123 typedef status_t (*CCU8PWMLIB_SetDutyFunctionPtr)(const void*, float, uint32_t, uint8_t); 00124 00125 00126 /******************************************************************************* 00127 * ENUMERATIONS ** 00128 ******************************************************************************/ 00133 typedef enum CCU8PWMLIB_StateType 00134 { 00138 CCU8PWMLIB_UNINITIALIZED, 00143 CCU8PWMLIB_INITIALIZED, 00147 CCU8PWMLIB_RUNNING, 00151 CCU8PWMLIB_STOPPED, 00152 00153 } CCU8PWMLIB_StateType; 00154 00159 typedef enum CCU8PWMLIB_CCUInUseType 00160 { 00164 CCU8PWMLIB_SLICE0, 00168 CCU8PWMLIB_SLICE1, 00172 CCU8PWMLIB_SLICE2, 00176 CCU8PWMLIB_SLICE3 00177 } CCU8PWMLIB_CCUInUseType; 00178 00183 typedef enum CCU8PWMLIB_ErrorCodesType 00184 { 00189 CCU8PWMLIB_OPER_NOT_ALLOWED_ERROR = 1, 00193 CCU8PWMLIB_INVALID_PARAM_ERROR, 00197 CCU8PWMLIB_IN_TRAP_ERROR, 00198 /* Debug Log Codes starts here*/ 00202 CCU8PWMLIB_FUNCTION_ENTRY, 00206 CCU8PWMLIB_FUNCTION_EXIT 00207 00208 } CCU8PWMLIB_ErrorCodesType; 00209 00213 typedef enum CCU8PWMLIB_DeadTimeConfType 00214 { 00218 CCU8PWMLIB_DISABLE, 00222 CCU8PWMLIB_ENABLE, 00226 CCU8PWMLIB_ENABLEDIRECTOUTPUT, 00230 CCU8PWMLIB_ENABLEINVERTEDOUTPUT 00231 } CCU8PWMLIB_DeadTimeConfType; 00232 00237 typedef enum CCU8PWMLIB_CompareModeType 00238 { 00244 CCU8PWMLIB_SYMMETRIC, 00250 CCU8PWMLIB_ASYMMETRIC 00251 } CCU8PWMLIB_CompareModeType; 00252 00253 typedef enum CCU8PWMLIB_EdgeTriggerType{ 00257 CCU8PWMLIB_NOTRIGGER, 00261 CCU8PWMLIB_RISINGEDGE, 00265 CCU8PWMLIB_FALLINGEDGE, 00269 CCU8PWMLIB_BOTHEDGES 00270 }CCU8PWMLIB_EdgeTriggerType; 00271 00276 typedef enum CCU8PWMLIB_CountingModeType 00277 { 00284 CCU8PWMLIB_EDGE_ALIGNED, 00291 CCU8PWMLIB_CENTER_ALIGNED 00292 }CCU8PWMLIB_CountingModeType; 00293 00297 typedef enum CCU8PWMLIB_ExtStartConfigType 00298 { 00302 CCU8PWMLIB_START_TIMER, 00306 CCU8PWMLIB_CLEAR_START_TIMER 00307 } CCU8PWMLIB_ExtStartConfigType; 00308 00312 typedef enum CCU8PWMLIB_ExtStopConfigType 00313 { 00317 CCU8PWMLIB_STOP_TIMER, 00321 CCU8PWMLIB_CLEAR_TIMER, 00326 CCU8PWMLIB_CLEAR_STOP_TIMER 00327 } CCU8PWMLIB_ExtStopConfigType; 00328 00332 typedef enum CCU8PWMLIB_EventNameType 00333 { 00337 CCU8PWMLIB_PERIODMATCHEVENT = 0, 00341 CCU8PWMLIB_COMPAREMATCHEVENT = 2, 00345 CCU8PWMLIB_EXTSTARTEVENT = 8, 00349 CCU8PWMLIB_EXTSTOPEVENT = 9, 00353 CCU8PWMLIB_TRAPEVENT = 10, 00354 }CCU8PWMLIB_EventNameType; 00355 /******************************************************************************* 00356 * STRUCTURES ** 00357 ******************************************************************************/ 00361 typedef struct CCU8PWMLIB_TimerRegsType 00362 { 00366 uint32_t CompReg1; 00370 uint32_t CompReg2; 00374 uint32_t PeriodReg; 00378 uint32_t TimerReg; 00379 } CCU8PWMLIB_TimerRegsType; 00380 00381 00382 00387 typedef struct CCU8PWMLIB_DynamicHandleType 00388 { 00389 00393 CCU8PWMLIB_StateType State; 00394 } CCU8PWMLIB_DynamicHandleType; 00395 00401 typedef struct CCU8PWMLIB_HandleType 00402 { 00407 const uint8_t kExtStartTrig; 00412 const uint8_t kExtStopTrig; 00417 const uint8_t kPassiveState0; 00422 const uint8_t kPassiveState1; 00427 const uint8_t kPassiveLevel0; 00432 const uint8_t kPassiveLevel1; 00437 const uint8_t kTimerMode; 00441 const uint8_t kTimerConcatenation; 00445 const uint8_t kTrapEnable; 00450 const uint8_t kTrapSync; 00454 const uint8_t kTrapLevel; 00459 const uint8_t kTrapExitControl; 00463 const uint8_t kDitherCompare; 00467 const uint8_t kDeadTimePrescalar; 00471 const uint8_t kDitherSetting; 00476 const uint8_t ShadowTransfer; 00481 const uint8_t Start; 00485 const uint8_t StartControl; 00489 const uint16_t kFallingDeadTime; 00493 const uint16_t kRisingDeadTime; 00494 00498 const float kResolution; 00499 00504 const uint32_t kCompareValue1; 00509 const uint32_t kCompareValue2; 00513 const uint32_t kCCUPrescalar; 00517 const CCU8PWMLIB_EdgeTriggerType kStartEdge; 00521 const CCU8PWMLIB_EdgeTriggerType kStopEdge; 00525 const uint32_t kPeriodVal; 00529 CCU8_GLOBAL_TypeDef* const CC8yKernRegsPtr; 00533 CCU8_CC8_TypeDef* const CC8yRegsPtr; 00537 CCU8_CC8_TypeDef* const CC8yRegs1Ptr; 00541 CCU8PWMLIB_DynamicHandleType* const DynamicHandleType; 00545 const CCU8PWMLIB_CountingModeType CountingMode; 00549 const CCU8PWMLIB_ExtStopConfigType ExtStopConfig; 00553 const CCU8PWMLIB_DeadTimeConfType DeadTimeConf; 00557 const CCU8PWMLIB_CompareModeType CompareMode; 00561 const CCU8PWMLIB_ExtStartConfigType ExtStartConfig; 00565 const CCU8PWMLIB_CCUInUseType FirstSlice; 00569 const CCU8PWMLIB_CCUInUseType SecondSlice; 00573 const uint32_t ShadowTransferMask; 00577 const uint32_t StartMask; 00582 const uint32_t InterruptControl; 00586 CCU8PWMLIB_SetCompareFuncionPtr SetCompareFuncPtr; 00590 CCU8PWMLIB_SetDutyFunctionPtr SetDutyFuncPtr; 00591 } CCU8PWMLIB_HandleType; 00592 00601 /******************************************************************************* 00602 **FUNCTION PROTOTYPES ** 00603 *******************************************************************************/ 00615 status_t CCU8PWMLIB_Init(const CCU8PWMLIB_HandleType* HandlePtr); 00616 00628 status_t CCU8PWMLIB_Deinit(const CCU8PWMLIB_HandleType* HandlePtr); 00629 00641 status_t CCU8PWMLIB_EnableExtStart(const CCU8PWMLIB_HandleType* HandlePtr); 00642 00656 status_t CCU8PWMLIB_DisableExtStart(const CCU8PWMLIB_HandleType* HandlePtr); 00657 00672 status_t CCU8PWMLIB_Start(const CCU8PWMLIB_HandleType* HandlePtr); 00673 00688 status_t CCU8PWMLIB_Stop(const CCU8PWMLIB_HandleType* HandlePtr); 00689 00706 status_t CCU8PWMLIB_SetCompare 00707 ( 00708 const CCU8PWMLIB_HandleType* HandlePtr, 00709 uint32_t Compare1, 00710 uint32_t Compare2 00711 00712 ); 00713 00732 status_t CCU8PWMLIB_SetDutyCycle 00733 ( 00734 const CCU8PWMLIB_HandleType* HandlePtr, 00735 float DutyCycle, 00736 uint32_t Shift, 00737 uint8_t Sign 00738 ); 00739 00759 status_t CCU8PWMLIB_SetPeriod 00760 ( 00761 const CCU8PWMLIB_HandleType* HandlePtr, 00762 uint32_t PwmFreq 00763 ); 00764 00786 status_t CCU8PWMLIB_SetPeriodAndCompare 00787 ( 00788 const CCU8PWMLIB_HandleType* HandlePtr, 00789 uint32_t PwmFreq, 00790 uint32_t Compare1, 00791 uint32_t Compare2 00792 ); 00793 00807 status_t CCU8PWMLIB_SetPwmFreq 00808 ( 00809 const CCU8PWMLIB_HandleType* HandlePtr, 00810 float PwmFreq 00811 ); 00829 status_t CCU8PWMLIB_SetPwmFreqAndDutyCycle 00830 ( 00831 const CCU8PWMLIB_HandleType* HandlePtr, 00832 float PwmFreq, 00833 float DutyCycle, 00834 uint32_t Shift, 00835 uint8_t Sign 00836 ); 00837 00852 status_t CCU8PWMLIB_SetTimerVal 00853 ( 00854 const CCU8PWMLIB_HandleType* HandlePtr, 00855 uint32_t TimerVal 00856 ); 00857 00876 status_t CCU8PWMLIB_SWRequestShadowTransfer 00877 ( 00878 const CCU8PWMLIB_HandleType* HandlePtr 00879 ); 00880 00894 status_t CCU8PWMLIB_GetPeriodReg 00895 ( 00896 const CCU8PWMLIB_HandleType* HandlePtr, 00897 uint32_t* PeriodRegPtr 00898 ); 00899 00912 status_t CCU8PWMLIB_ResetTrapFlag(const CCU8PWMLIB_HandleType* HandlePtr); 00913 00928 status_t CCU8PWMLIB_GetTimerRegsVal 00929 ( 00930 const CCU8PWMLIB_HandleType* HandlePtr, 00931 CCU8PWMLIB_TimerRegsType* TimerRegsPtr 00932 ); 00933 00947 status_t CCU8PWMLIB_GetTimerStatus 00948 ( 00949 const CCU8PWMLIB_HandleType* HandlePtr, 00950 uint32_t* TimerStatusPtr 00951 ); 00952 00967 status_t CCU8PWMLIB_EnableEvent 00968 ( 00969 const CCU8PWMLIB_HandleType * HandlePtr, 00970 const CCU8PWMLIB_EventNameType Event 00971 ); 00972 00986 status_t CCU8PWMLIB_DisableEvent 00987 ( 00988 const CCU8PWMLIB_HandleType * HandlePtr, 00989 const CCU8PWMLIB_EventNameType Event 00990 ); 00991 01005 status_t CCU8PWMLIB_ClearPendingEvent 01006 ( 01007 const CCU8PWMLIB_HandleType * HandlePtr, 01008 const CCU8PWMLIB_EventNameType Event 01009 ); 01010 01025 status_t CCU8PWMLIB_SetPendingEvent 01026 ( 01027 const CCU8PWMLIB_HandleType * HandlePtr, 01028 const CCU8PWMLIB_EventNameType Event 01029 ); 01030 01045 status_t CCU8PWMLIB_GetPendingEvent 01046 ( 01047 const CCU8PWMLIB_HandleType * HandlePtr, 01048 const CCU8PWMLIB_EventNameType Event, 01049 uint8_t* EvtStatus 01050 ); 01051 01061 status_t CCU8PWMLIB_SetDutyEdgeAlignAsymmetric 01062 ( 01063 const void* HdlPtr, 01064 float DutyCycle, 01065 uint32_t Shift, 01066 uint8_t Sign 01067 ); 01068 01078 status_t CCU8PWMLIB_SetDutyEdgeAlignSymmetric 01079 ( 01080 const void* HdlPtr, 01081 float DutyCycle, 01082 uint32_t Shift, 01083 uint8_t Sign 01084 ); 01085 01095 status_t CCU8PWMLIB_SetDutyEdgeAlignSymmetricTimerConcat 01096 ( 01097 const void* HdlPtr, 01098 float DutyCycle, 01099 uint32_t Shift, 01100 uint8_t Sign 01101 ); 01102 01112 status_t CCU8PWMLIB_SetDutyCenterAlignSymmetric 01113 ( 01114 const void* HandlePtr, 01115 float DutyCycle, 01116 uint32_t Shift, 01117 uint8_t Sign 01118 ); 01119 01129 status_t CCU8PWMLIB_SetDutyCenterAlignAsymmetric 01130 ( 01131 const void* HandlePtr, 01132 float DutyCycle, 01133 uint32_t Shift, 01134 uint8_t Sign 01135 ); 01136 01145 status_t CCU8PWMLIB_SetCompareAsymmetric 01146 ( 01147 const void* HdlPtr, 01148 uint32_t Compare1, 01149 uint32_t Compare2 01150 ); 01151 01160 status_t CCU8PWMLIB_SetCompareSymmetric 01161 ( 01162 const void* HdlPtr, 01163 uint32_t Compare1, 01164 uint32_t Compare2 01165 ); 01166 01175 status_t CCU8PWMLIB_SetCompareEdgeAlignSymmetricTimerConcat 01176 ( 01177 const void* HdlPtr, 01178 uint32_t Compare1, 01179 uint32_t Compare2 01180 ); 01181 01187 #endif /* CCU8PWMLIB_H_ */ 01188