pwm.h
346 lines
| 11.7 KiB
| text/x-c
|
CLexer
kaveh
|
r90 | /*------------------------------------------------------------------------------ | ||
-- This file is a part of the libuc, microcontroler library | ||||
-- Copyright (C) 2014, Kaveh Mohamadabadi | ||||
-- | ||||
-- This program is free software; you can redistribute it and/or modify | ||||
-- it under the terms of the GNU General Public License as published by | ||||
-- the Free Software Foundation; either version 3 of the License, or | ||||
-- (at your option) any later version. | ||||
-- | ||||
-- This program is distributed in the hope that it will be useful, | ||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
-- GNU General Public License for more details. | ||||
-- | ||||
-- You should have received a copy of the GNU General Public License | ||||
-- along with this program; if not, write to the Free Software | ||||
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||||
------------------------------------------------------------------------------- | ||||
-- Author : Kaveh Mohamadabadi | ||||
-- Mail : kaveh.mohamadabadi@gmail.com | ||||
-------------------------------------------------------------------------------*/ | ||||
kaveh
|
r92 | /// \defgroup PWM | ||
kaveh
|
r90 | /*! \file pwm.h | ||
\brief PWM api. | ||||
The pwm api gives you a standard way to drive any pwm pin on any processor. | ||||
With this api you will be able to open and configure your PWM module, define the | ||||
associated pins when applicable and set the duty cycle and frequency. Note that depending | ||||
on the target architecture you can have soft or hard PWM. | ||||
A simple example to configure and use PWM4_CH4 on STM32 discovery for example. | ||||
\code | ||||
// lets open PWM4_CH4 | ||||
//config : | ||||
// -TIMER = TIMER4 (PWM4=TIMER4) | ||||
// -PWM channel = 4 | ||||
// -PWM output = PD15 | ||||
// -PWM frequency = 1kHz | ||||
// -PWM duty cycle = 40.5% | ||||
pwmopen(PWM4_CH4,PD15); | ||||
int error = pwmsetconfig(PWM4_CH4,1000,40.5); | ||||
//check that everything is ok | ||||
if(error!=-1) //=> no error | ||||
{ | ||||
//to change duty cycle to 15% for example: | ||||
pwmsetdutycycle(PWM4_CH4,15.0); | ||||
//you can also change the frequency: | ||||
pwmsetfrequency(PWM4_CH4,455000); | ||||
} | ||||
\endcode | ||||
kaveh
|
r92 | \ingroup PWM | ||
kaveh
|
r90 | |||
*/ | ||||
#ifndef PWM_H | ||||
#define PWM_H | ||||
#include <stdint.h> | ||||
#ifdef __cplusplus | ||||
extern "C" { | ||||
#endif | ||||
kaveh
|
r92 | /** | ||
* @brief PWM open function | ||||
* | ||||
* This function opens the given PWM, it should turn it ON iff needed and enable it. | ||||
* @param PWM The PWM module and channel PWM1_CH6 for example | ||||
* @return The 0 on success or -1 if it fails. | ||||
* @ingroup PWM | ||||
*/ | ||||
kaveh
|
r90 | extern int pwmopen(int PWM,uint32_t pin); | ||
extern int pwmsetconfig(int PWM,uint32_t freq,float dutyCycle); | ||||
extern int pwmsetdutycycle(int PWM,float dutyCycle); | ||||
extern int pwmsetfrequency(int PWM,uint32_t freq); | ||||
#ifdef __cplusplus | ||||
} | ||||
#endif | ||||
#ifndef DOXYGEN_SHOULD_SKIP_THIS | ||||
typedef enum | ||||
{ | ||||
channel1 = 0, | ||||
channel2 = 1, | ||||
channel3 = 2, | ||||
channel4 = 3, | ||||
}channelx; | ||||
#define PWM1_CH1 ((0 << 8) + 0 ) | ||||
#define PWM1_CH2 ((0 << 8) + 1 ) | ||||
#define PWM1_CH3 ((0 << 8) + 2 ) | ||||
#define PWM1_CH4 ((0 << 8) + 3 ) | ||||
#define PWM1_CH5 ((0 << 8) + 4 ) | ||||
#define PWM1_CH6 ((0 << 8) + 5 ) | ||||
#define PWM1_CH7 ((0 << 8) + 6 ) | ||||
#define PWM1_CH8 ((0 << 8) + 7 ) | ||||
#define PWM1_CH9 ((0 << 8) + 8 ) | ||||
#define PWM1_CH10 ((0 << 8) + 9 ) | ||||
#define PWM1_CH11 ((0 << 8) + 10 ) | ||||
#define PWM1_CH12 ((0 << 8) + 11 ) | ||||
#define PWM1_CH13 ((0 << 8) + 12 ) | ||||
#define PWM1_CH14 ((0 << 8) + 13 ) | ||||
#define PWM1_CH15 ((0 << 8) + 14 ) | ||||
#define PWM1_CH16 ((0 << 8) + 15 ) | ||||
#define PWM2_CH1 ((1 << 8) + 0 ) | ||||
#define PWM2_CH2 ((1 << 8) + 1 ) | ||||
#define PWM2_CH3 ((1 << 8) + 2 ) | ||||
#define PWM2_CH4 ((1 << 8) + 3 ) | ||||
#define PWM2_CH5 ((1 << 8) + 4 ) | ||||
#define PWM2_CH6 ((1 << 8) + 5 ) | ||||
#define PWM2_CH7 ((1 << 8) + 6 ) | ||||
#define PWM2_CH8 ((1 << 8) + 7 ) | ||||
#define PWM2_CH9 ((1 << 8) + 8 ) | ||||
#define PWM2_CH10 ((1 << 8) + 9 ) | ||||
#define PWM2_CH11 ((1 << 8) + 10 ) | ||||
#define PWM2_CH12 ((1 << 8) + 11 ) | ||||
#define PWM2_CH13 ((1 << 8) + 12 ) | ||||
#define PWM2_CH14 ((1 << 8) + 13 ) | ||||
#define PWM2_CH15 ((1 << 8) + 14 ) | ||||
#define PWM2_CH16 ((1 << 8) + 15 ) | ||||
#define PWM3_CH1 ((2 << 8) + 0 ) | ||||
#define PWM3_CH2 ((2 << 8) + 1 ) | ||||
#define PWM3_CH3 ((2 << 8) + 2 ) | ||||
#define PWM3_CH4 ((2 << 8) + 3 ) | ||||
#define PWM3_CH5 ((2 << 8) + 4 ) | ||||
#define PWM3_CH6 ((2 << 8) + 5 ) | ||||
#define PWM3_CH7 ((2 << 8) + 6 ) | ||||
#define PWM3_CH8 ((2 << 8) + 7 ) | ||||
#define PWM3_CH9 ((2 << 8) + 8 ) | ||||
#define PWM3_CH10 ((2 << 8) + 9 ) | ||||
#define PWM3_CH11 ((2 << 8) + 10 ) | ||||
#define PWM3_CH12 ((2 << 8) + 11 ) | ||||
#define PWM3_CH13 ((2 << 8) + 12 ) | ||||
#define PWM3_CH14 ((2 << 8) + 13 ) | ||||
#define PWM3_CH15 ((2 << 8) + 14 ) | ||||
#define PWM3_CH16 ((2 << 8) + 15 ) | ||||
#define PWM4_CH1 ((3 << 8) + 0 ) | ||||
#define PWM4_CH2 ((3 << 8) + 1 ) | ||||
#define PWM4_CH3 ((3 << 8) + 2 ) | ||||
#define PWM4_CH4 ((3 << 8) + 3 ) | ||||
#define PWM4_CH5 ((3 << 8) + 4 ) | ||||
#define PWM4_CH6 ((3 << 8) + 5 ) | ||||
#define PWM4_CH7 ((3 << 8) + 6 ) | ||||
#define PWM4_CH8 ((3 << 8) + 7 ) | ||||
#define PWM4_CH9 ((3 << 8) + 8 ) | ||||
#define PWM4_CH10 ((3 << 8) + 9 ) | ||||
#define PWM4_CH11 ((3 << 8) + 10 ) | ||||
#define PWM4_CH12 ((3 << 8) + 11 ) | ||||
#define PWM4_CH13 ((3 << 8) + 12 ) | ||||
#define PWM4_CH14 ((3 << 8) + 13 ) | ||||
#define PWM4_CH15 ((3 << 8) + 14 ) | ||||
#define PWM4_CH16 ((3 << 8) + 15 ) | ||||
#define PWM5_CH1 ((4 << 8) + 0 ) | ||||
#define PWM5_CH2 ((4 << 8) + 1 ) | ||||
#define PWM5_CH3 ((4 << 8) + 2 ) | ||||
#define PWM5_CH4 ((4 << 8) + 3 ) | ||||
#define PWM5_CH5 ((4 << 8) + 4 ) | ||||
#define PWM5_CH6 ((4 << 8) + 5 ) | ||||
#define PWM5_CH7 ((4 << 8) + 6 ) | ||||
#define PWM5_CH8 ((4 << 8) + 7 ) | ||||
#define PWM5_CH9 ((4 << 8) + 8 ) | ||||
#define PWM5_CH10 ((4 << 8) + 9 ) | ||||
#define PWM5_CH11 ((4 << 8) + 10 ) | ||||
#define PWM5_CH12 ((4 << 8) + 11 ) | ||||
#define PWM5_CH13 ((4 << 8) + 12 ) | ||||
#define PWM5_CH14 ((4 << 8) + 13 ) | ||||
#define PWM5_CH15 ((4 << 8) + 14 ) | ||||
#define PWM5_CH16 ((4 << 8) + 15 ) | ||||
#define PWM6_CH1 ((5 << 8) + 0 ) | ||||
#define PWM6_CH2 ((5 << 8) + 1 ) | ||||
#define PWM6_CH3 ((5 << 8) + 2 ) | ||||
#define PWM6_CH4 ((5 << 8) + 3 ) | ||||
#define PWM6_CH5 ((5 << 8) + 4 ) | ||||
#define PWM6_CH6 ((5 << 8) + 5 ) | ||||
#define PWM6_CH7 ((5 << 8) + 6 ) | ||||
#define PWM6_CH8 ((5 << 8) + 7 ) | ||||
#define PWM6_CH9 ((5 << 8) + 8 ) | ||||
#define PWM6_CH10 ((5 << 8) + 9 ) | ||||
#define PWM6_CH11 ((5 << 8) + 10 ) | ||||
#define PWM6_CH12 ((5 << 8) + 11 ) | ||||
#define PWM6_CH13 ((5 << 8) + 12 ) | ||||
#define PWM6_CH14 ((5 << 8) + 13 ) | ||||
#define PWM6_CH15 ((5 << 8) + 14 ) | ||||
#define PWM6_CH16 ((5 << 8) + 15 ) | ||||
#define PWM7_CH1 ((6 << 8) + 0 ) | ||||
#define PWM7_CH2 ((6 << 8) + 1 ) | ||||
#define PWM7_CH3 ((6 << 8) + 2 ) | ||||
#define PWM7_CH4 ((6 << 8) + 3 ) | ||||
#define PWM7_CH5 ((6 << 8) + 4 ) | ||||
#define PWM7_CH6 ((6 << 8) + 5 ) | ||||
#define PWM7_CH7 ((6 << 8) + 6 ) | ||||
#define PWM7_CH8 ((6 << 8) + 7 ) | ||||
#define PWM7_CH9 ((6 << 8) + 8 ) | ||||
#define PWM7_CH10 ((6 << 8) + 9 ) | ||||
#define PWM7_CH11 ((6 << 8) + 10 ) | ||||
#define PWM7_CH12 ((6 << 8) + 11 ) | ||||
#define PWM7_CH13 ((6 << 8) + 12 ) | ||||
#define PWM7_CH14 ((6 << 8) + 13 ) | ||||
#define PWM7_CH15 ((6 << 8) + 14 ) | ||||
#define PWM7_CH16 ((6 << 8) + 15 ) | ||||
#define PWM8_CH1 ((7 << 8) + 0 ) | ||||
#define PWM8_CH2 ((7 << 8) + 1 ) | ||||
#define PWM8_CH3 ((7 << 8) + 2 ) | ||||
#define PWM8_CH4 ((7 << 8) + 3 ) | ||||
#define PWM8_CH5 ((7 << 8) + 4 ) | ||||
#define PWM8_CH6 ((7 << 8) + 5 ) | ||||
#define PWM8_CH7 ((7 << 8) + 6 ) | ||||
#define PWM8_CH8 ((7 << 8) + 7 ) | ||||
#define PWM8_CH9 ((7 << 8) + 8 ) | ||||
#define PWM8_CH10 ((7 << 8) + 9 ) | ||||
#define PWM8_CH11 ((7 << 8) + 10 ) | ||||
#define PWM8_CH12 ((7 << 8) + 11 ) | ||||
#define PWM8_CH13 ((7 << 8) + 12 ) | ||||
#define PWM8_CH14 ((7 << 8) + 13 ) | ||||
#define PWM8_CH15 ((7 << 8) + 14 ) | ||||
#define PWM8_CH16 ((7 << 8) + 15 ) | ||||
#define PWM9_CH1 ((8 << 8) + 0 ) | ||||
#define PWM9_CH2 ((8 << 8) + 1 ) | ||||
#define PWM9_CH3 ((8 << 8) + 2 ) | ||||
#define PWM9_CH4 ((8 << 8) + 3 ) | ||||
#define PWM9_CH5 ((8 << 8) + 4 ) | ||||
#define PWM9_CH6 ((8 << 8) + 5 ) | ||||
#define PWM9_CH7 ((8 << 8) + 6 ) | ||||
#define PWM9_CH8 ((8 << 8) + 7 ) | ||||
#define PWM9_CH9 ((8 << 8) + 8 ) | ||||
#define PWM9_CH10 ((8 << 8) + 9 ) | ||||
#define PWM9_CH11 ((8 << 8) + 10 ) | ||||
#define PWM9_CH12 ((8 << 8) + 11 ) | ||||
#define PWM9_CH13 ((8 << 8) + 12 ) | ||||
#define PWM9_CH14 ((8 << 8) + 13 ) | ||||
#define PWM9_CH15 ((8 << 8) + 14 ) | ||||
#define PWM9_CH16 ((8 << 8) + 15 ) | ||||
#define PWM10_CH1 ((9 << 8) + 0 ) | ||||
#define PWM10_CH2 ((9 << 8) + 1 ) | ||||
#define PWM10_CH3 ((9 << 8) + 2 ) | ||||
#define PWM10_CH4 ((9 << 8) + 3 ) | ||||
#define PWM10_CH5 ((9 << 8) + 4 ) | ||||
#define PWM10_CH6 ((9 << 8) + 5 ) | ||||
#define PWM10_CH7 ((9 << 8) + 6 ) | ||||
#define PWM10_CH8 ((9 << 8) + 7 ) | ||||
#define PWM10_CH9 ((9 << 8) + 8 ) | ||||
#define PWM10_CH10 ((9 << 8) + 9 ) | ||||
#define PWM10_CH11 ((9 << 8) + 10 ) | ||||
#define PWM10_CH12 ((9 << 8) + 11 ) | ||||
#define PWM10_CH13 ((9 << 8) + 12 ) | ||||
#define PWM10_CH14 ((9 << 8) + 13 ) | ||||
#define PWM10_CH15 ((9 << 8) + 14 ) | ||||
#define PWM10_CH16 ((9 << 8) + 15 ) | ||||
#define PWM11_CH1 ((10 << 8) + 0 ) | ||||
#define PWM11_CH2 ((10 << 8) + 1 ) | ||||
#define PWM11_CH3 ((10 << 8) + 2 ) | ||||
#define PWM11_CH4 ((10 << 8) + 3 ) | ||||
#define PWM11_CH5 ((10 << 8) + 4 ) | ||||
#define PWM11_CH6 ((10 << 8) + 5 ) | ||||
#define PWM11_CH7 ((10 << 8) + 6 ) | ||||
#define PWM11_CH8 ((10 << 8) + 7 ) | ||||
#define PWM11_CH9 ((10 << 8) + 8 ) | ||||
#define PWM11_CH10 ((10 << 8) + 9 ) | ||||
#define PWM11_CH11 ((10 << 8) + 10 ) | ||||
#define PWM11_CH12 ((10 << 8) + 11 ) | ||||
#define PWM11_CH13 ((10 << 8) + 12 ) | ||||
#define PWM11_CH14 ((10 << 8) + 13 ) | ||||
#define PWM11_CH15 ((10 << 8) + 14 ) | ||||
#define PWM11_CH16 ((10 << 8) + 15 ) | ||||
#define PWM12_CH1 ((11 << 8) + 0 ) | ||||
#define PWM12_CH2 ((11 << 8) + 1 ) | ||||
#define PWM12_CH3 ((11 << 8) + 2 ) | ||||
#define PWM12_CH4 ((11 << 8) + 3 ) | ||||
#define PWM12_CH5 ((11 << 8) + 4 ) | ||||
#define PWM12_CH6 ((11 << 8) + 5 ) | ||||
#define PWM12_CH7 ((11 << 8) + 6 ) | ||||
#define PWM12_CH8 ((11 << 8) + 7 ) | ||||
#define PWM12_CH9 ((11 << 8) + 8 ) | ||||
#define PWM12_CH10 ((11 << 8) + 9 ) | ||||
#define PWM12_CH11 ((11 << 8) + 10 ) | ||||
#define PWM12_CH12 ((11 << 8) + 11 ) | ||||
#define PWM12_CH13 ((11 << 8) + 12 ) | ||||
#define PWM12_CH14 ((11 << 8) + 13 ) | ||||
#define PWM12_CH15 ((11 << 8) + 14 ) | ||||
#define PWM12_CH16 ((11 << 8) + 15 ) | ||||
#define PWM13_CH1 ((12 << 8) + 0 ) | ||||
#define PWM13_CH2 ((12 << 8) + 1 ) | ||||
#define PWM13_CH3 ((12 << 8) + 2 ) | ||||
#define PWM13_CH4 ((12 << 8) + 3 ) | ||||
#define PWM13_CH5 ((12 << 8) + 4 ) | ||||
#define PWM13_CH6 ((12 << 8) + 5 ) | ||||
#define PWM13_CH7 ((12 << 8) + 6 ) | ||||
#define PWM13_CH8 ((12 << 8) + 7 ) | ||||
#define PWM13_CH9 ((12 << 8) + 8 ) | ||||
#define PWM13_CH10 ((12 << 8) + 9 ) | ||||
#define PWM13_CH11 ((12 << 8) + 10 ) | ||||
#define PWM13_CH12 ((12 << 8) + 11 ) | ||||
#define PWM13_CH13 ((12 << 8) + 12 ) | ||||
#define PWM13_CH14 ((12 << 8) + 13 ) | ||||
#define PWM13_CH15 ((12 << 8) + 14 ) | ||||
#define PWM13_CH16 ((12 << 8) + 15 ) | ||||
#define PWM14_CH1 ((13 << 8) + 0 ) | ||||
#define PWM14_CH2 ((13 << 8) + 1 ) | ||||
#define PWM14_CH3 ((13 << 8) + 2 ) | ||||
#define PWM14_CH4 ((13 << 8) + 3 ) | ||||
#define PWM14_CH5 ((13 << 8) + 4 ) | ||||
#define PWM14_CH6 ((13 << 8) + 5 ) | ||||
#define PWM14_CH7 ((13 << 8) + 6 ) | ||||
#define PWM14_CH8 ((13 << 8) + 7 ) | ||||
#define PWM14_CH9 ((13 << 8) + 8 ) | ||||
#define PWM14_CH10 ((13 << 8) + 9 ) | ||||
#define PWM14_CH11 ((13 << 8) + 10 ) | ||||
#define PWM14_CH12 ((13 << 8) + 11 ) | ||||
#define PWM14_CH13 ((13 << 8) + 12 ) | ||||
#define PWM14_CH14 ((13 << 8) + 13 ) | ||||
#define PWM14_CH15 ((13 << 8) + 14 ) | ||||
#define PWM14_CH16 ((13 << 8) + 15 ) | ||||
#define PWM15_CH1 ((14 << 8) + 0 ) | ||||
#define PWM15_CH2 ((14 << 8) + 1 ) | ||||
#define PWM15_CH3 ((14 << 8) + 2 ) | ||||
#define PWM15_CH4 ((14 << 8) + 3 ) | ||||
#define PWM15_CH5 ((14 << 8) + 4 ) | ||||
#define PWM15_CH6 ((14 << 8) + 5 ) | ||||
#define PWM15_CH7 ((14 << 8) + 6 ) | ||||
#define PWM15_CH8 ((14 << 8) + 7 ) | ||||
#define PWM15_CH9 ((14 << 8) + 8 ) | ||||
#define PWM15_CH10 ((14 << 8) + 9 ) | ||||
#define PWM15_CH11 ((14 << 8) + 10 ) | ||||
#define PWM15_CH12 ((14 << 8) + 11 ) | ||||
#define PWM15_CH13 ((14 << 8) + 12 ) | ||||
#define PWM15_CH14 ((14 << 8) + 13 ) | ||||
#define PWM15_CH15 ((14 << 8) + 14 ) | ||||
#define PWM15_CH16 ((14 << 8) + 15 ) | ||||
#define PWM16_CH1 ((15 << 8) + 0 ) | ||||
#define PWM16_CH2 ((15 << 8) + 1 ) | ||||
#define PWM16_CH3 ((15 << 8) + 2 ) | ||||
#define PWM16_CH4 ((15 << 8) + 3 ) | ||||
#define PWM16_CH5 ((15 << 8) + 4 ) | ||||
#define PWM16_CH6 ((15 << 8) + 5 ) | ||||
#define PWM16_CH7 ((15 << 8) + 6 ) | ||||
#define PWM16_CH8 ((15 << 8) + 7 ) | ||||
#define PWM16_CH9 ((15 << 8) + 8 ) | ||||
#define PWM16_CH10 ((15 << 8) + 9 ) | ||||
#define PWM16_CH11 ((15 << 8) + 10 ) | ||||
#define PWM16_CH12 ((15 << 8) + 11 ) | ||||
#define PWM16_CH13 ((15 << 8) + 12 ) | ||||
#define PWM16_CH14 ((15 << 8) + 13 ) | ||||
#define PWM16_CH15 ((15 << 8) + 14 ) | ||||
#define PWM16_CH16 ((15 << 8) + 15 ) | ||||
#endif | ||||
#endif // PWM_H | ||||