summaryrefslogblamecommitdiff
path: root/nuttx/arch/arm/src/lpc17xx/lpc17_mcpwm.h
blob: 0d562854fd9bfcc4678e9429483619f0cd1e4c7d (plain) (tree)












































                                                                                       
                             







































































                                                                                       










































































                                                                                                      

                         






                                                                                         

                                   






















































                                                                                                


                            



                                                                                   













                                                                                       
/************************************************************************************
 * arch/arm/src/lpc17xx/lpc17_mcpwm.h
 *
 *   Copyright (C) 2010 Gregory Nutt. All rights reserved.
 *   Author: Gregory Nutt <spudmonkey@racsa.co.cr>
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 * 3. Neither the name NuttX nor the names of its contributors may be
 *    used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 ************************************************************************************/

#ifndef __ARCH_ARM_SRC_LPC17XX_LPC17_MCPWM_H
#define __ARCH_ARM_SRC_LPC17XX_LPC17_MCPWM_H

/************************************************************************************
 * Included Files
 ************************************************************************************/

#include <nuttx/config.h>

#include "chip.h"
#include "lpc17_memorymap.h"

/************************************************************************************
 * Pre-processor Definitions
 ************************************************************************************/

/* Register offsets *****************************************************************/

#define LPC17_MCPWM_CON_OFFSET       0x0000 /* PWM Control read address */
#define LPC17_MCPWM_CONSET_OFFSET    0x0004 /* PWM Control set address */
#define LPC17_MCPWM_CONCLR_OFFSET    0x0008 /* PWM Control clear address */
#define LPC17_MCPWM_CAPCON_OFFSET    0x000c /* Capture Control read address */
#define LPC17_MCPWM_CAPCONSET_OFFSET 0x0010 /* Capture Control set address */
#define LPC17_MCPWM_CAPCONCLR_OFFSET 0x0014 /* Event Control clear address */
#define LPC17_MCPWM_TC0_OFFSET       0x0018 /* Timer Counter register, channel 0 */
#define LPC17_MCPWM_TC1_OFFSET       0x001c /* Timer Counter register, channel 1 */
#define LPC17_MCPWM_TC2_OFFSET       0x0020 /* Timer Counter register, channel 2 */
#define LPC17_MCPWM_LIM0_OFFSET      0x0024 /* Limit register, channel 0 */
#define LPC17_MCPWM_LIM1_OFFSET      0x0028 /* Limit register, channel 1 */
#define LPC17_MCPWM_LIM2_OFFSET      0x002c /* Limit register, channel 2 */
#define LPC17_MCPWM_MAT0_OFFSET      0x0030 /* Match register, channel 0 */
#define LPC17_MCPWM_MAT1_OFFSET      0x0034 /* Match register, channel 1 */
#define LPC17_MCPWM_MAT2_OFFSET      0x0038 /* Match register, channel 2 */
#define LPC17_MCPWM_DT_OFFSET        0x003c /* Dead time register */
#define LPC17_MCPWM_CP_OFFSET        0x0040 /* Commutation Pattern register */
#define LPC17_MCPWM_CAP0_OFFSET      0x0044 /* Capture register, channel 0 */
#define LPC17_MCPWM_CAP1_OFFSET      0x0048 /* Capture register, channel 1 */
#define LPC17_MCPWM_CAP2_OFFSET      0x004c /* Capture register, channel 2 */
#define LPC17_MCPWM_INTEN_OFFSET     0x0050 /* Interrupt Enable read address */
#define LPC17_MCPWM_INTENSET_OFFSET  0x0054 /* Interrupt Enable set address */
#define LPC17_MCPWM_INTENCLR_OFFSET  0x0058 /* Interrupt Enable clear address */
#define LPC17_MCPWM_CNTCON_OFFSET    0x005c /* Count Control read address */
#define LPC17_MCPWM_CNTCONSET_OFFSET 0x0060 /* Count Control set address */
#define LPC17_MCPWM_CNTCONCLR_OFFSET 0x0064 /* Count Control clear address */
#define LPC17_MCPWM_INTF_OFFSET      0x0068 /* Interrupt flags read address */
#define LPC17_MCPWM_INTFSET_OFFSET   0x006c /* Interrupt flags set address */
#define LPC17_MCPWM_INTFCLR_OFFSET   0x0070 /* Interrupt flags clear address */
#define LPC17_MCPWM_CAPCLR_OFFSET    0x0074 /* Capture clear address */

/* Register addresses ***************************************************************/

#define LPC17_MCPWM_CON              (LPC17_MCPWM_BASE+LPC17_MCPWM_CON_OFFSET)
#define LPC17_MCPWM_CONSET           (LPC17_MCPWM_BASE+LPC17_MCPWM_CONSET_OFFSET)
#define LPC17_MCPWM_CONCLR           (LPC17_MCPWM_BASE+LPC17_MCPWM_CONCLR_OFFSET)
#define LPC17_MCPWM_CAPCON           (LPC17_MCPWM_BASE+LPC17_MCPWM_CAPCON_OFFSET)
#define LPC17_MCPWM_CAPCONSET        (LPC17_MCPWM_BASE+LPC17_MCPWM_CAPCONSET_OFFSET)
#define LPC17_MCPWM_CAPCONCLR        (LPC17_MCPWM_BASE+LPC17_MCPWM_CAPCONCLR_OFFSET)
#define LPC17_MCPWM_TC0              (LPC17_MCPWM_BASE+LPC17_MCPWM_TC0_OFFSET)
#define LPC17_MCPWM_TC1              (LPC17_MCPWM_BASE+LPC17_MCPWM_TC1_OFFSET)
#define LPC17_MCPWM_TC2              (LPC17_MCPWM_BASE+LPC17_MCPWM_TC2_OFFSET)
#define LPC17_MCPWM_LIM0             (LPC17_MCPWM_BASE+LPC17_MCPWM_LIM0_OFFSET)
#define LPC17_MCPWM_LIM1             (LPC17_MCPWM_BASE+LPC17_MCPWM_LIM1_OFFSET)
#define LPC17_MCPWM_LIM2             (LPC17_MCPWM_BASE+LPC17_MCPWM_LIM2_OFFSET)
#define LPC17_MCPWM_MAT0             (LPC17_MCPWM_BASE+LPC17_MCPWM_MAT0_OFFSET)
#define LPC17_MCPWM_MAT1             (LPC17_MCPWM_BASE+LPC17_MCPWM_MAT1_OFFSET)
#define LPC17_MCPWM_MAT2             (LPC17_MCPWM_BASE+LPC17_MCPWM_MAT2_OFFSET)
#define LPC17_MCPWM_DT               (LPC17_MCPWM_BASE+LPC17_MCPWM_DT_OFFSET)
#define LPC17_MCPWM_CP               (LPC17_MCPWM_BASE+LPC17_MCPWM_CP_OFFSET)
#define LPC17_MCPWM_CAP0             (LPC17_MCPWM_BASE+LPC17_MCPWM_CAP0_OFFSET)
#define LPC17_MCPWM_CAP1             (LPC17_MCPWM_BASE+LPC17_MCPWM_CAP1_OFFSET)
#define LPC17_MCPWM_CAP2             (LPC17_MCPWM_BASE+LPC17_MCPWM_CAP2_OFFSET)
#define LPC17_MCPWM_INTEN            (LPC17_MCPWM_BASE+LPC17_MCPWM_INTEN_OFFSET)
#define LPC17_MCPWM_INTENSET         (LPC17_MCPWM_BASE+LPC17_MCPWM_INTENSET_OFFSET)
#define LPC17_MCPWM_INTENCLR         (LPC17_MCPWM_BASE+LPC17_MCPWM_INTENCLR_OFFSET)
#define LPC17_MCPWM_CNTCON           (LPC17_MCPWM_BASE+LPC17_MCPWM_CNTCON_OFFSET)
#define LPC17_MCPWM_CNTCONSET        (LPC17_MCPWM_BASE+LPC17_MCPWM_CNTCONSET_OFFSET)
#define LPC17_MCPWM_CNTCONCLR        (LPC17_MCPWM_BASE+LPC17_MCPWM_CNTCONCLR_OFFSET)
#define LPC17_MCPWM_INTF             (LPC17_MCPWM_BASE+LPC17_MCPWM_INTF_OFFSET)
#define LPC17_MCPWM_INTFSET          (LPC17_MCPWM_BASE+LPC17_MCPWM_INTFSET_OFFSET)
#define LPC17_MCPWM_INTFCLR          (LPC17_MCPWM_BASE+LPC17_MCPWM_INTFCLR_OFFSET)
#define LPC17_MCPWM_CAPCLR           (LPC17_MCPWM_BASE+LPC17_MCPWM_CAPCLR_OFFSET)

/* Register bit definitions *********************************************************/
/* There are no bit field definitions for the following registers because they support
 * 32-bit values:
 *
 * - Timer Counter register, channel 0 (TC0), Timer Counter register, channel 1 (TC1),
 *   and Timer Counter register, channel 2 (TC2): 32-bit Timer/Counter values for
 *   channels 0, 1, 2 (no bit field definitions)
 *
 * - Limit register, channel 0 (LIM0), Limit register, channel 1 (LIM1), and Limit
 *   register, channel 2 (LIM2): 32-bit Limit values for TC0, 1, 2 (no bit field
 *   definitions)
 *
 * - Match register, channel 0 MAT0), Match register, channel 1 (MAT1), and Match
 *   register, channel 2 (MAT2): 32-bit Match values for TC0, 1, 2 (no bit field
 *   definitions).
 *
 * - Capture register, channel 0 (CAP0), Capture register, channel 1 (CAP1), and
 *   Capture register, channel 2 (CAP2): 32-bit TC value at a capture event for
 *  channels 0, 1, 2 (no bit field definitions)
 */

/* PWM Control read address (CON), PWM Control set address (CONSET), and PWM Control
 * clear address (CONCLR) common regiser bit definitions.
 */

#define MCPWM_CON_RUN0               (1 << 0)  /* Bit 0:  Stops/starts timer channel 0 */
#define MCPWM_CON_CENTER0            (1 << 1)  /* Bit 1:  Chan 0 edge/center aligned operation */
#define MCPWM_CON_POLA0              (1 << 2)  /* Bit 2:  Polarity of MCOA0 and MCOB0 */
#define MCPWM_CON_DTE0               (1 << 3)  /* Bit 3:  Dead time feature control */
#define MCPWM_CON_DISUP0             (1 << 4)  /* Bit 4:  Enable/disable register updates */
                                               /* Bits 5-7: Reserved */
#define MCPWM_CON_RUN1               (1 << 8)  /* Bit 8:  Stops/starts timer channel 1 */
#define MCPWM_CON_CENTER1            (1 << 9)  /* Bit 9:  Chan 1 edge/center aligned operation */
#define MCPWM_CON_POLA1              (1 << 10) /* Bit 10: Polarity of MCOA1 and MCOB1 */
#define MCPWM_CON_DTE1               (1 << 11) /* Bit 11: Dead time feature control */
#define MCPWM_CON_DISUP1             (1 << 12) /* Bit 12: Enable/disable register updates */
                                               /* Bits 13-15: Reserved */
#define MCPWM_CON_RUN2               (1 << 16) /* Bit 16:  Stops/starts timer channel 2 */
#define MCPWM_CON_CENTER2            (1 << 17) /* Bit 17:  Chan 2 edge/center aligned operation */
#define MCPWM_CON_POLA2              (1 << 18) /* Bit 18: Polarity of MCOA1 and MCOB1 */
#define MCPWM_CON_DTE2               (1 << 19) /* Bit 19: Dead time feature control */
#define MCPWM_CON_DISUP2             (1 << 20) /* Bit 20: Enable/disable register updates */
                                               /* Bits 21-28: Reserved */
#define MCPWM_CON_INVBDC             (1 << 29) /* Bit 29: Polarity of MCOB outputs (all channels)  */
#define MCPWM_CON_ACMODE             (1 << 30) /* Bit 30: 3-phase AC mode select */
#define MCPWM_CON_DCMODE             (1 << 31) /* Bit 31: 3-phase DC mode select */

/* Capture Control read address (CAPCON), Capture Control set address (CAPCONSET),
 * and Event Control clear address (CAPCONCLR) common register bit defintions
 */

#define MCPWM_CAPCON_CAP0MCI0RE      (1 << 0)  /* Bit 0:  Enable chan0 rising edge capture MCI0 */
#define MCPWM_CAPCON_CAP0MCI0FE      (1 << 1)  /* Bit 1:  Enable chan 0 falling edge capture MCI0 */
#define MCPWM_CAPCON_CAP0MCI1RE      (1 << 2)  /* Bit 2:  Enable chan 0 rising edge capture MCI1 */
#define MCPWM_CAPCON_CAP0MCI1FE      (1 << 3)  /* Bit 3:  Enable chan 0 falling edge capture MCI1 */
#define MCPWM_CAPCON_CAP0MCI2RE      (1 << 4)  /* Bit 4:  Enable chan 0 rising edge capture MCI2 */
#define MCPWM_CAPCON_CAP0MCI2FE      (1 << 5)  /* Bit 5:  Enable chan 0 falling edge capture MCI2 */
#define MCPWM_CAPCON_CAP1MCI0RE      (1 << 6)  /* Bit 6:  Enable chan 1 rising edge capture MCI0 */
#define MCPWM_CAPCON_CAP1MCI0FE      (1 << 7)  /* Bit 7:  Enable chan 1 falling edge capture MCI0 */
#define MCPWM_CAPCON_CAP1MCI1RE      (1 << 8)  /* Bit 8:  Enable chan 1 rising edge capture MCI1 */
#define MCPWM_CAPCON_CAP1MCI1FE      (1 << 9)  /* Bit 9:  Enable chan 1 falling edge capture MCI1 */
#define MCPWM_CAPCON_CAP1MCI2RE      (1 << 10) /* Bit 10: Enable chan 1 rising edge capture MCI2 */
#define MCPWM_CAPCON_CAP1MCI2FE      (1 << 11) /* Bit 11: Enable chan 1 falling edge capture MCI2 */
#define MCPWM_CAPCON_CAP2MCI0RE      (1 << 12) /* Bit 12: Enable chan 2 rising edge capture MCI0 */
#define MCPWM_CAPCON_CAP2MCI0FE      (1 << 13) /* Bit 13: Enable chan 2 falling edge capture MCI0 */
#define MCPWM_CAPCON_CAP2MCI1RE      (1 << 14) /* Bit 14: Enable chan 2 rising edge capture MCI1 */
#define MCPWM_CAPCON_CAP2MCI1FE      (1 << 15) /* Bit 15: Enable chan 2 falling edge capture MCI1 */
#define MCPWM_CAPCON_CAP2MCI2RE      (1 << 16) /* Bit 16: Enable chan 2 rising edge capture MCI2 */
#define MCPWM_CAPCON_CAP2MCI2FE      (1 << 17) /* Bit 17: Enable chan 2 falling edge capture MCI2 */
#define MCPWM_CAPCON_RT0             (1 << 18) /* Bit 18: TC0 reset by chan 0 capture event */
#define MCPWM_CAPCON_RT1             (1 << 19) /* Bit 19: TC1 reset by chan 1 capture event */
#define MCPWM_CAPCON_RT2             (1 << 20) /* Bit 20: TC2 reset by chan 2 capture event */
#define MCPWM_CAPCON_HNFCAP0         (1 << 21) /* Bit 21: Hardware noise filter */
#define MCPWM_CAPCON_HNFCAP1         (1 << 22) /* Bit 22: Hardware noise filter */
#define MCPWM_CAPCON_HNFCAP2         (1 << 23) /* Bit 23: Hardware noise filter */
                                               /* Bits 24-31: Reserved
/* Dead time register */

#define MCPWM_DT_DT0_SHIFT           (0)       /* Bits 0-9: Dead time for channel 0 */
#define MCPWM_DT_DT0_MASK            (0x03ff << MCPWM_DT_DT0_SHIFT)
#define MCPWM_DT_DT1_SHIFT           (10)      /* Bits 10-19: Dead time for channel 1 */
#define MCPWM_DT_DT1_MASK            (0x03ff << MCPWM_DT_DT1_SHIFT)
#define MCPWM_DT_DT2_SHIFT           (20)      /* Bits 20-29: Dead time for channel 2 */
#define MCPWM_DT_DT2_MASK            (0x03ff << MCPWM_DT_DT2_SHIFT)
                                               /* Bits 30-31: reserved */
/* Commutation Pattern register */

#define MCPWM_CP_CCPA0               (1 << 0)  /* Bit 0:  Iinternal MCOA0 */
#define MCPWM_CP_CCPB0               (1 << 1)  /* Bit 1:  MCOB0 tracks internal MCOA0 */
#define MCPWM_CP_CCPA1               (1 << 2)  /* Bit 2:  MCOA1 tracks internal MCOA0 */
#define MCPWM_CP_CCPB1               (1 << 3)  /* Bit 3:  MCOB1 tracks internal MCOA0 */
#define MCPWM_CP_CCPA2               (1 << 4)  /* Bit 4:  MCOA2 tracks internal MCOA0 */
#define MCPWM_CP_CCPB2               (1 << 5)  /* Bit 5:  MCOB2 tracks internal MCOA0 */
                                               /* Bits 6-31: reserved */

/* Interrupt Enable read address (INTEN), Interrupt Enable set address (INTENSET),
 * Interrupt Enable clear address (INTENCLR), Interrupt flags read address (INTF),
 * Interrupt flags set address (INTFSET), and Interrupt flags clear address (INTFCLR)
 * common bit field definitions
 */

#define MCPWM_INT_ILIM0              (1 << 0)  /* Bit 0:  Limit interrupts for channel 0 */
#define MCPWM_INT_IMAT0              (1 << 1)  /* Bit 1:  Match interrupts for channel 0 */
#define MCPWM_INT_ICAP0              (1 << 2)  /* Bit 2:  Capture interrupts for channel 0 */
                                               /* Bit 3:  Reserved */
#define MCPWM_INT_ILIM1              (1 << 4)  /* Bit 4:  Limit interrupts for channel 1 */
#define MCPWM_INT_IMAT1              (1 << 5)  /* Bit 5:  Match interrupts for channel 1 */
#define MCPWM_INT_ICAP1              (1 << 6)  /* Bit 6:  Capture interrupts for channel 1 */
                                               /* Bit 7:  Reserved */
#define MCPWM_INT_ILIM2              (1 << 8)  /* Bit 8:  Limit interrupts for channel 2 */
#define MCPWM_INT_IMAT2              (1 << 9)  /* Bit 9:  Match interrupts for channel 2 */
#define MCPWM_INT_ICAP2              (1 << 10) /* Bit 10: Capture interrupts for channel 2 */
                                               /* Bits 11-14:  Reserved */
#define MCPWM_INT_ABORT              (1 << 15) /* Bit 15:  Fast abort interrupt */
                                               /* Bits 16-31: Reserved */

/* Count Control read address (CNTCON), Count Control set address (CNTCONSET), and
 * Count Control clear address (CNTCONCLR) common register bit definitions.
 */

#define MCPWM_CNTCON_TC0MCI0RE       (1 << 0)  /* Bit 0:  Counter 0 incr on rising edge MCI0 */
#define MCPWM_CNTCON_TC0MCI0FE       (1 << 1)  /* Bit 1:  Counter 0 incr onfalling edge MCI0 */
#define MCPWM_CNTCON_TC0MCI1RE       (1 << 2)  /* Bit 2:  Counter 0 incr onrising edge MCI1 */
#define MCPWM_CNTCON_TC0MCI1FE       (1 << 3)  /* Bit 3:  Counter 0 incr onfalling edge MCI1 */
#define MCPWM_CNTCON_TC0MCI2RE       (1 << 4)  /* Bit 4:  Counter 0 incr onrising edge MCI2 */
#define MCPWM_CNTCON_TC0MCI2FE       (1 << 5)  /* Bit 5:  Counter 0 incr onfalling edge MCI2 */
#define MCPWM_CNTCON_TC1MCI0RE       (1 << 6)  /* Bit 6:  Counter 1 incr onrising edge MCI0 */
#define MCPWM_CNTCON_TC1MCI0FE       (1 << 7)  /* Bit 7:  Counter 1 incr onfalling edge MCI0 */
#define MCPWM_CNTCON_TC1MCI1RE       (1 << 8)  /* Bit 8:  Counter 1 incr onrising edge MCI1 */
#define MCPWM_CNTCON_TC1MCI1FE       (1 << 9)  /* Bit 9:  Counter 1 incr onfalling edge MCI1 */
#define MCPWM_CNTCON_TC1MCI2RE       (1 << 10) /* Bit 10: Counter 1 incr onrising edge MCI2 */
#define MCPWM_CNTCON_TC1MCI2FE       (1 << 11) /* Bit 11: Counter 1 incr onfalling edge MCI2 */
#define MCPWM_CNTCON_TC2MCI0RE       (1 << 12) /* Bit 12: Counter 2 incr onrising edge MCI0 */
#define MCPWM_CNTCON_TC2MCI0FE       (1 << 13) /* Bit 13: Counter 2 incr onfalling edge MCI0 */
#define MCPWM_CNTCON_TC2MCI1RE       (1 << 14) /* Bit 14: Counter 2 incr onrising edge MCI1 */
#define MCPWM_CNTCON_TC2MCI1FE       (1 << 15) /* Bit 15: Counter 2 incr onfalling edge MCI1 */
#define MCPWM_CNTCON_TC2MCI2RE       (1 << 16) /* Bit 16: Counter 2 incr onrising edge MCI2 */
#define MCPWM_CNTCON_TC2MCI2FE       (1 << 17) /* Bit 17: Counter 2 incr onfalling edge MCI2 */
                                               /* Bits 28-28: Reserved */
#define MCPWM_CNTCON_CNTR0           (1 << 29) /* Bit 29: Channel 0 counter mode */
#define MCPWM_CNTCON_CNTR1           (1 << 30) /* Bit 30: Channel 1 counter mode */
#define MCPWM_CNTCON_CNTR2           (1 << 31) /* Bit 31: Channel 2 counter mode */

/* Capture clear address */

#define MCPWM_CAPCLR_MCCLR0          (1 << 0)  /* Bit 0:  Clear MCCAP0 register */
#define MCPWM_CAPCLR_MCCLR1          (1 << 1)  /* Bit 1:  Clear MCCAP1 register */
#define MCPWM_CAPCLR_MCCLR2          (1 << 2)  /* Bit 2:  Clear MCCAP2 register */
                                               /* Bits 2-31: Reserved */ 

/************************************************************************************
 * Public Types
 ************************************************************************************/

/************************************************************************************
 * Public Data
 ************************************************************************************/

/************************************************************************************
 * Public Functions
 ************************************************************************************/

#endif /* __ARCH_ARM_SRC_LPC17XX_LPC17_MCPWM_H */