##// END OF EJS Templates
Some cleaning plus DAC library started
Some cleaning plus DAC library started

File last commit:

r100:e8e36f727532 dev_alexis
r100:e8e36f727532 dev_alexis
Show More
pwm.h
346 lines | 11.7 KiB | text/x-c | CLexer
/*------------------------------------------------------------------------------
-- 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
-------------------------------------------------------------------------------*/
/// \defgroup PWM
/*! \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
\ingroup PWM
*/
#ifndef PWM_H
#define PWM_H
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @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
*/
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