/**************************************************************************//** * @file pwm.h * @brief N9H30 series PWM driver header file * * @note * SPDX-License-Identifier: Apache-2.0 * Copyright (C) 2018 Nuvoton Technology Corp. All rights reserved. *****************************************************************************/ #ifndef __NU_PWM_H__ #define __NU_PWM_H__ #include "N9H30.h" #include "nu_sys.h" #ifdef __cplusplus extern "C" { #endif /** @addtogroup N9H30_Device_Driver N9H30 Device Driver @{ */ /** @addtogroup N9H30_PWM_Driver PWM Driver @{ */ /** @addtogroup N9H30_PWM_EXPORTED_CONSTANTS PWM Exported Constants @{ */ #define PWM_OFFSET 0xc ///< each channel has 3 control registers which occupies 12 bytes // Timer channel identity information #define PWM_TIMER_NUM 4 ///< Total PWM channel count #define PWM_TIMER_MIN 0 ///< Min PWM channel number #define PWM_TIMER_MAX 3 ///< Max PWM channel number #define PWM_TIMER0 0 ///< PWM channel 0 #define PWM_TIMER1 1 ///< PWM channel 1 #define PWM_TIMER2 2 ///< PWM channel 2 #define PWM_TIMER3 3 ///< PWM channel 3 //ioctl command #define START_PWMTIMER 0 ///< Start PWM ioctl command #define STOP_PWMTIMER 1 ///< Stop PWM ioctl command #define SET_CSR 2 ///< Set CSR ioctl command #define SET_CP 3 ///< Set CP ioctl command #define SET_DZI 4 ///< Set dead zone ioctl command #define SET_INVERTER 5 ///< Set inverter ioctl command #define SET_MODE 6 ///< Set OP mode ioctl command #define ENABLE_DZ_GENERATOR 7 ///< Enable dead zone ioctl command #define DISABLE_DZ_GENERATOR 8 ///< Disable dead zone ioctl command #define ENABLE_PWMGPIOOUTPUT 9 ///< Enable PWM output ioctl command #define PWM_STOP_METHOD1 1 ///< PWM stop method 1 #define PWM_STOP_METHOD2 2 ///< PWM stop method 2 //#define PWM_STOP_METHOD3 3 not recommended //Timer default value #define DEFAULT_CSR CSRD16 ///< Default CSR value #define DEFAULT_CP 255 ///< Default CP value #define DEFAULT_DZI 50 ///< Default DZI value #define DEFAULT_CNR 19531 ///< Default CNR value #define DEFAULT_CMR (19531/4) ///< Default CMR value #define DEFAULT_MODE PWM_TOGGLE ///< Default OP mode // for PWM_PPR #define DZI_MIN 0 ///< Min DZI value #define DZI_MAX 255 ///< Max DZI value #define CP_MIN 0 ///< Min CP value #define CP_MAX 255 ///< Max CP value // for PWM_CSR #define CSR_MIN 0 ///< Min CSR value #define CSR_MAX 4 ///< Mac SCR value #define CSRD2 0x0 ///< Div by 2 #define CSRD4 0x1 ///< Div by 4 #define CSRD8 0x2 ///< Div by 8 #define CSRD16 0x3 ///< Div by 16 #define CSRD1 0x4 ///< Div by 1 // for PWM_PCR #define PWMDZG_ENABLE 1 ///< Enable PWM dead zone #define PWMDZG_DISABLE 0 ///< Disable PWM dead zone #define PWM_ENABLE 1 ///< Enable PWM channel #define PWM_DISABLE 0 ///< Disable PWM channel #define PWM_TOGGLE 1 ///< PWM toggle mode #define PWM_ONESHOT 0 ///< PWM one-shot mode #define PWM_INVON 1 ///< Enable PWM inverter #define PWM_INVOFF 0 ///< Disable PWM inverter // for PWM_CNR #define CNR_MIN 0 ///< Min CNR value #define CNR_MAX 65535 ///< Mac CNR value // for PWM_CMR #define CMR_MIN 0 ///< Min CMR value #define CMR_MAX 65535 ///< Max CMR value // for pin control #define PWM0_GPA12 0 ///< PWM0 output on GPA12 #define PWM0_GPB2 1 ///< PWM0 output on GPB2 #define PWM1_GPA13 4 ///< PWM1 output on GPA13 #define PWM1_GPB3 5 ///< PWM1 output on GPB3 #define PWM2_GPA14 7 ///< PWM2 output on GPA14 #define PWM2_GPH2 9 ///< PWM2 output on GPH2 #define PWM3_GPA15 10 ///< PWM3 output on GPA15 #define PWM3_GPH3 12 ///< PWM3 output on GPH3 #define PWM_ERR_ID 0xFFFF1300 ///< PWM library ID //PWM Error code #define pwmInvalidTimerChannel (PWM_ERR_ID|1) ///< Invalid channel number #define pwmInvalidStructLength (PWM_ERR_ID|2) ///< Invalid structure length #define pwmInvalidIoctlCommand (PWM_ERR_ID|3) ///< Invalid ioctl command #define pwmInvalidStopMethod (PWM_ERR_ID|4) ///< Invalid stop mode #define pwmInvalidCPValue (PWM_ERR_ID|5) ///< Invalid CP value #define pwmInvalidDZIValue (PWM_ERR_ID|6) ///< Invalid DZI value #define pwmInvalidCSRValue (PWM_ERR_ID|7) ///< Invalid CSR value #define pwmInvalidDZGStatus (PWM_ERR_ID|8) ///< Invalid DZ status #define pwmInvalidTimerStatus (PWM_ERR_ID|9) ///< Invalid timer status #define pwmInvalidInverterValue (PWM_ERR_ID|10) ///< Invalid inverter value #define pwmInvalidModeStatus (PWM_ERR_ID|11) ///< Invalid OP mode #define pwmInvalidCNRValue (PWM_ERR_ID|12) ///< Invalid CNR value #define pwmInvalidCMRValue (PWM_ERR_ID|13) ///< Invalid CMR value #define pwmTimerNotOpen (PWM_ERR_ID|14) ///< PWM channel not stop #define pwmTimerBusy (PWM_ERR_ID|15) ///< PWM channel is busy #define pwmInvalidPin (PWM_ERR_ID|16) ///< Invalid PWM output pin /*@}*/ /* end of group N9H30_PWM_EXPORTED_CONSTANTS */ /// @cond HIDDEN_SYMBOLS /** @addtogroup N9H30_PWM_EXPORTED_STRUCTS PWM Exported Structs @{ */ typedef union { UINT value; struct { UINT cp0: 8, cp1: 8, dzi0: 8, dzi1: 8; } field; } typePPR; typedef union { UINT value; struct { UINT csr0: 3, _reserved3: 1, csr1: 3, _reserved7: 1, csr2: 3, _reserved11: 1, csr3: 3, _reserved15: 1, _reserved16_31: 16; } field; } typeCSR; typedef union { UINT value; struct { UINT ch0_en: 1, _reserved1: 1, ch0_inverter: 1, ch0_mode: 1, grpup0_dzen: 1, grpup1_dzen: 1, _reserved6_7: 2, ch1_en: 1, _reserved9: 1, ch1_inverter: 1, ch1_mode: 1, ch2_en: 1, _reserved13: 1, ch2_inverter: 1, ch2_mode: 1, ch3_en: 1, _reserved17: 1, ch3_inverter: 1, ch3_mode: 1, _reserved20_31: 12; } field; } typePCR; typedef union { UINT value; struct { UINT cnr: 16, _reserved16_31: 16; } field; } typeCNR; typedef union { UINT value; struct { UINT cmr: 16, _reserved16_31: 16; } field; } typeCMR; // for write operation typedef union { UINT value; struct { UINT cnr: 16, cmr: 16; } field; } typePWMVALUE; // for read operation typedef struct { UINT volatile PDR; BOOL volatile InterruptFlag; BOOL _reversed0; BOOL _reversed1; BOOL _reversed2; } typePWMSTATUS; /*@}*/ /* end of group N9H30_PWM_EXPORTED_STRUCTS */ /// @endcond /* HIDDEN_SYMBOLS */ /** @addtogroup N9H30_PWM_EXPORTED_FUNCTIONS PWM Exported Functions @{ */ // function definition INT pwmInit(void); INT pwmExit(void); INT pwmOpen(const INT nTimerIdentity); INT pwmClose(const INT nTimerIdentity); INT pwmRead(const INT nTimerIdentity, PUCHAR pucStatusValue, const UINT uLength); INT pwmWrite(const INT nTimerIdentity, PUCHAR pucCNRCMRValue, const UINT uLength); INT pwmIoctl(const INT nTimerIdentity, const UINT uCommand, const UINT uIndication, UINT uValue); /*@}*/ /* end of group N9H30_PWM_EXPORTED_FUNCTIONS */ /*@}*/ /* end of group N9H30_PWM_Driver */ /*@}*/ /* end of group N9H30_Device_Driver */ #ifdef __cplusplus } #endif #endif //__NU_PWM_H__ /*** (C) COPYRIGHT 2018 Nuvoton Technology Corp. ***/