510 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			510 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/**********************************************************************
							 | 
						||
| 
								 | 
							
								* $Id$      lpc17xx_mcpwm.c             2010-05-21
							 | 
						||
| 
								 | 
							
								*//**
							 | 
						||
| 
								 | 
							
								* @file     lpc17xx_mcpwm.c
							 | 
						||
| 
								 | 
							
								* @brief    Contains all functions support for Motor Control PWM firmware
							 | 
						||
| 
								 | 
							
								*           library on LPC17xx
							 | 
						||
| 
								 | 
							
								* @version  2.0
							 | 
						||
| 
								 | 
							
								* @date     21. May. 2010
							 | 
						||
| 
								 | 
							
								* @author   NXP MCU SW Application Team
							 | 
						||
| 
								 | 
							
								*
							 | 
						||
| 
								 | 
							
								* Copyright(C) 2010, NXP Semiconductor
							 | 
						||
| 
								 | 
							
								* All rights reserved.
							 | 
						||
| 
								 | 
							
								*
							 | 
						||
| 
								 | 
							
								***********************************************************************
							 | 
						||
| 
								 | 
							
								* Software that is described herein is for illustrative purposes only
							 | 
						||
| 
								 | 
							
								* which provides customers with programming information regarding the
							 | 
						||
| 
								 | 
							
								* products. This software is supplied "AS IS" without any warranties.
							 | 
						||
| 
								 | 
							
								* NXP Semiconductors assumes no responsibility or liability for the
							 | 
						||
| 
								 | 
							
								* use of the software, conveys no license or title under any patent,
							 | 
						||
| 
								 | 
							
								* copyright, or mask work right to the product. NXP Semiconductors
							 | 
						||
| 
								 | 
							
								* reserves the right to make changes in the software without
							 | 
						||
| 
								 | 
							
								* notification. NXP Semiconductors also make no representation or
							 | 
						||
| 
								 | 
							
								* warranty that such application will be suitable for the specified
							 | 
						||
| 
								 | 
							
								* use without further testing or modification.
							 | 
						||
| 
								 | 
							
								* Permission to use, copy, modify, and distribute this software and its
							 | 
						||
| 
								 | 
							
								* documentation is hereby granted, under NXP Semiconductors'
							 | 
						||
| 
								 | 
							
								* relevant copyright in the software, without fee, provided that it
							 | 
						||
| 
								 | 
							
								* is used in conjunction with NXP Semiconductors microcontrollers.  This
							 | 
						||
| 
								 | 
							
								* copyright, permission, and disclaimer notice must appear in all copies of
							 | 
						||
| 
								 | 
							
								* this code.
							 | 
						||
| 
								 | 
							
								**********************************************************************/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Peripheral group ----------------------------------------------------------- */
							 | 
						||
| 
								 | 
							
								/** @addtogroup MCPWM
							 | 
						||
| 
								 | 
							
								 * @{
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Includes ------------------------------------------------------------------- */
							 | 
						||
| 
								 | 
							
								#include "lpc17xx_mcpwm.h"
							 | 
						||
| 
								 | 
							
								#include "lpc17xx_clkpwr.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* If this source file built with example, the LPC17xx FW library configuration
							 | 
						||
| 
								 | 
							
								 * file in each example directory ("lpc17xx_libcfg.h") must be included,
							 | 
						||
| 
								 | 
							
								 * otherwise the default FW library configuration file must be included instead
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								#ifdef __BUILD_WITH_EXAMPLE__
							 | 
						||
| 
								 | 
							
								#include "lpc17xx_libcfg.h"
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#include "lpc17xx_libcfg_default.h"
							 | 
						||
| 
								 | 
							
								#endif /* __BUILD_WITH_EXAMPLE__ */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef _MCPWM
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Public Functions ----------------------------------------------------------- */
							 | 
						||
| 
								 | 
							
								/** @addtogroup MCPWM_Public_Functions
							 | 
						||
| 
								 | 
							
								 * @{
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*********************************************************************//**
							 | 
						||
| 
								 | 
							
								 * @brief       Initializes the MCPWM peripheral
							 | 
						||
| 
								 | 
							
								 * @param[in]   MCPWMx      Motor Control PWM peripheral selected,
							 | 
						||
| 
								 | 
							
								 *              Should be: LPC_MCPWM
							 | 
						||
| 
								 | 
							
								 * @return      None
							 | 
						||
| 
								 | 
							
								 **********************************************************************/
							 | 
						||
| 
								 | 
							
								void MCPWM_Init(LPC_MCPWM_TypeDef *MCPWMx)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* Turn On MCPWM PCLK */
							 | 
						||
| 
								 | 
							
								    CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCMC, ENABLE);
							 | 
						||
| 
								 | 
							
								    /* As default, peripheral clock for MCPWM module
							 | 
						||
| 
								 | 
							
								     * is set to FCCLK / 2 */
							 | 
						||
| 
								 | 
							
								    // CLKPWR_SetPCLKDiv(CLKPWR_PCLKSEL_MC, CLKPWR_PCLKSEL_CCLK_DIV_2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    MCPWMx->MCCAP_CLR = MCPWM_CAPCLR_CAP(0) | MCPWM_CAPCLR_CAP(1) | MCPWM_CAPCLR_CAP(2);
							 | 
						||
| 
								 | 
							
								    MCPWMx->MCINTFLAG_CLR = MCPWM_INT_ILIM(0) | MCPWM_INT_ILIM(1) | MCPWM_INT_ILIM(2) \
							 | 
						||
| 
								 | 
							
								                            | MCPWM_INT_IMAT(0) | MCPWM_INT_IMAT(1) | MCPWM_INT_IMAT(2) \
							 | 
						||
| 
								 | 
							
								                            | MCPWM_INT_ICAP(0) | MCPWM_INT_ICAP(1) | MCPWM_INT_ICAP(2);
							 | 
						||
| 
								 | 
							
								    MCPWMx->MCINTEN_CLR = MCPWM_INT_ILIM(0) | MCPWM_INT_ILIM(1) | MCPWM_INT_ILIM(2) \
							 | 
						||
| 
								 | 
							
								                            | MCPWM_INT_IMAT(0) | MCPWM_INT_IMAT(1) | MCPWM_INT_IMAT(2) \
							 | 
						||
| 
								 | 
							
								                            | MCPWM_INT_ICAP(0) | MCPWM_INT_ICAP(1) | MCPWM_INT_ICAP(2);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*********************************************************************//**
							 | 
						||
| 
								 | 
							
								 * @brief       Configures each channel in MCPWM peripheral according to the
							 | 
						||
| 
								 | 
							
								 *              specified parameters in the MCPWM_CHANNEL_CFG_Type.
							 | 
						||
| 
								 | 
							
								 * @param[in]   MCPWMx          Motor Control PWM peripheral selected
							 | 
						||
| 
								 | 
							
								 *                              should be: LPC_MCPWM
							 | 
						||
| 
								 | 
							
								 * @param[in]   channelNum      Channel number, should be: 0..2.
							 | 
						||
| 
								 | 
							
								 * @param[in]   channelSetup    Pointer to a MCPWM_CHANNEL_CFG_Type structure
							 | 
						||
| 
								 | 
							
								*                               that contains the configuration information for the
							 | 
						||
| 
								 | 
							
								*                               specified MCPWM channel.
							 | 
						||
| 
								 | 
							
								 * @return      None
							 | 
						||
| 
								 | 
							
								 **********************************************************************/
							 | 
						||
| 
								 | 
							
								void MCPWM_ConfigChannel(LPC_MCPWM_TypeDef *MCPWMx, uint32_t channelNum,
							 | 
						||
| 
								 | 
							
								                        MCPWM_CHANNEL_CFG_Type * channelSetup)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if (channelNum <= 2) {
							 | 
						||
| 
								 | 
							
								        if (channelNum == 0) {
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCTIM0 = channelSetup->channelTimercounterValue;
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCPER0 = channelSetup->channelPeriodValue;
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCPW0 = channelSetup->channelPulsewidthValue;
							 | 
						||
| 
								 | 
							
								        } else if (channelNum == 1) {
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCTIM1 = channelSetup->channelTimercounterValue;
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCPER1 = channelSetup->channelPeriodValue;
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCPW1 = channelSetup->channelPulsewidthValue;
							 | 
						||
| 
								 | 
							
								        } else if (channelNum == 2) {
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCTIM2 = channelSetup->channelTimercounterValue;
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCPER2 = channelSetup->channelPeriodValue;
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCPW2 = channelSetup->channelPulsewidthValue;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            return;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (channelSetup->channelType /* == MCPWM_CHANNEL_CENTER_MODE */){
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCON_SET = MCPWM_CON_CENTER(channelNum);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCON_CLR = MCPWM_CON_CENTER(channelNum);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (channelSetup->channelPolarity /* == MCPWM_CHANNEL_PASSIVE_HI */){
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCON_SET = MCPWM_CON_POLAR(channelNum);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCON_CLR = MCPWM_CON_POLAR(channelNum);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (channelSetup->channelDeadtimeEnable /* == ENABLE */){
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCON_SET = MCPWM_CON_DTE(channelNum);
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCDEADTIME &= ~(MCPWM_DT(channelNum, 0x3FF));
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCDEADTIME |= MCPWM_DT(channelNum, channelSetup->channelDeadtimeValue);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCON_CLR = MCPWM_CON_DTE(channelNum);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (channelSetup->channelUpdateEnable /* == ENABLE */){
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCON_CLR = MCPWM_CON_DISUP(channelNum);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCON_SET = MCPWM_CON_DISUP(channelNum);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*********************************************************************//**
							 | 
						||
| 
								 | 
							
								 * @brief       Write to MCPWM shadow registers - Update the value for period
							 | 
						||
| 
								 | 
							
								 *              and pulse width in MCPWM peripheral.
							 | 
						||
| 
								 | 
							
								 * @param[in]   MCPWMx          Motor Control PWM peripheral selected
							 | 
						||
| 
								 | 
							
								 *                              Should be: LPC_MCPWM
							 | 
						||
| 
								 | 
							
								 * @param[in]   channelNum      Channel Number, should be: 0..2.
							 | 
						||
| 
								 | 
							
								 * @param[in]   channelSetup    Pointer to a MCPWM_CHANNEL_CFG_Type structure
							 | 
						||
| 
								 | 
							
								*                               that contains the configuration information for the
							 | 
						||
| 
								 | 
							
								*                               specified MCPWM channel.
							 | 
						||
| 
								 | 
							
								 * @return      None
							 | 
						||
| 
								 | 
							
								 **********************************************************************/
							 | 
						||
| 
								 | 
							
								void MCPWM_WriteToShadow(LPC_MCPWM_TypeDef *MCPWMx, uint32_t channelNum,
							 | 
						||
| 
								 | 
							
								                                MCPWM_CHANNEL_CFG_Type *channelSetup)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if (channelNum == 0){
							 | 
						||
| 
								 | 
							
								        MCPWMx->MCPER0 = channelSetup->channelPeriodValue;
							 | 
						||
| 
								 | 
							
								        MCPWMx->MCPW0 = channelSetup->channelPulsewidthValue;
							 | 
						||
| 
								 | 
							
								    } else if (channelNum == 1) {
							 | 
						||
| 
								 | 
							
								        MCPWMx->MCPER1 = channelSetup->channelPeriodValue;
							 | 
						||
| 
								 | 
							
								        MCPWMx->MCPW1 = channelSetup->channelPulsewidthValue;
							 | 
						||
| 
								 | 
							
								    } else if (channelNum == 2) {
							 | 
						||
| 
								 | 
							
								        MCPWMx->MCPER2 = channelSetup->channelPeriodValue;
							 | 
						||
| 
								 | 
							
								        MCPWMx->MCPW2 = channelSetup->channelPulsewidthValue;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*********************************************************************//**
							 | 
						||
| 
								 | 
							
								 * @brief       Configures capture function in MCPWM peripheral
							 | 
						||
| 
								 | 
							
								 * @param[in]   MCPWMx          Motor Control PWM peripheral selected
							 | 
						||
| 
								 | 
							
								 *                              Should be: LPC_MCPWM
							 | 
						||
| 
								 | 
							
								 * @param[in]   channelNum      MCI (Motor Control Input pin) number
							 | 
						||
| 
								 | 
							
								 *                              Should be: 0..2
							 | 
						||
| 
								 | 
							
								 * @param[in]   captureConfig   Pointer to a MCPWM_CAPTURE_CFG_Type structure
							 | 
						||
| 
								 | 
							
								*                               that contains the configuration information for the
							 | 
						||
| 
								 | 
							
								*                               specified MCPWM capture.
							 | 
						||
| 
								 | 
							
								 * @return
							 | 
						||
| 
								 | 
							
								 **********************************************************************/
							 | 
						||
| 
								 | 
							
								void MCPWM_ConfigCapture(LPC_MCPWM_TypeDef *MCPWMx, uint32_t channelNum,
							 | 
						||
| 
								 | 
							
								                        MCPWM_CAPTURE_CFG_Type *captureConfig)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if (channelNum <= 2) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (captureConfig->captureFalling /* == ENABLE */) {
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCAPCON_SET = MCPWM_CAPCON_CAPMCI_FE(captureConfig->captureChannel, channelNum);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCAPCON_CLR = MCPWM_CAPCON_CAPMCI_FE(captureConfig->captureChannel, channelNum);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (captureConfig->captureRising /* == ENABLE */) {
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCAPCON_SET = MCPWM_CAPCON_CAPMCI_RE(captureConfig->captureChannel, channelNum);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCAPCON_CLR = MCPWM_CAPCON_CAPMCI_RE(captureConfig->captureChannel, channelNum);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (captureConfig->timerReset /* == ENABLE */){
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCAPCON_SET = MCPWM_CAPCON_RT(captureConfig->captureChannel);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCAPCON_CLR = MCPWM_CAPCON_RT(captureConfig->captureChannel);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (captureConfig->hnfEnable /* == ENABLE */){
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCAPCON_SET = MCPWM_CAPCON_HNFCAP(channelNum);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCAPCON_CLR = MCPWM_CAPCON_HNFCAP(channelNum);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*********************************************************************//**
							 | 
						||
| 
								 | 
							
								 * @brief       Clears current captured value in specified capture channel
							 | 
						||
| 
								 | 
							
								 * @param[in]   MCPWMx      Motor Control PWM peripheral selected
							 | 
						||
| 
								 | 
							
								 *                          Should be: LPC_MCPWM
							 | 
						||
| 
								 | 
							
								 * @param[in]   captureChannel  Capture channel number, should be: 0..2
							 | 
						||
| 
								 | 
							
								 * @return      None
							 | 
						||
| 
								 | 
							
								 **********************************************************************/
							 | 
						||
| 
								 | 
							
								void MCPWM_ClearCapture(LPC_MCPWM_TypeDef *MCPWMx, uint32_t captureChannel)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    MCPWMx->MCCAP_CLR = MCPWM_CAPCLR_CAP(captureChannel);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*********************************************************************//**
							 | 
						||
| 
								 | 
							
								 * @brief       Get current captured value in specified capture channel
							 | 
						||
| 
								 | 
							
								 * @param[in]   MCPWMx      Motor Control PWM peripheral selected,
							 | 
						||
| 
								 | 
							
								 *                          Should be: LPC_MCPWM
							 | 
						||
| 
								 | 
							
								 * @param[in]   captureChannel  Capture channel number, should be: 0..2
							 | 
						||
| 
								 | 
							
								 * @return      None
							 | 
						||
| 
								 | 
							
								 **********************************************************************/
							 | 
						||
| 
								 | 
							
								uint32_t MCPWM_GetCapture(LPC_MCPWM_TypeDef *MCPWMx, uint32_t captureChannel)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if (captureChannel == 0){
							 | 
						||
| 
								 | 
							
								        return (MCPWMx->MCCR0);
							 | 
						||
| 
								 | 
							
								    } else if (captureChannel == 1) {
							 | 
						||
| 
								 | 
							
								        return (MCPWMx->MCCR1);
							 | 
						||
| 
								 | 
							
								    } else if (captureChannel == 2) {
							 | 
						||
| 
								 | 
							
								        return (MCPWMx->MCCR2);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return (0);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*********************************************************************//**
							 | 
						||
| 
								 | 
							
								 * @brief       Configures Count control in MCPWM peripheral
							 | 
						||
| 
								 | 
							
								 * @param[in]   MCPWMx      Motor Control PWM peripheral selected
							 | 
						||
| 
								 | 
							
								 *                          Should be: LPC_MCPWM
							 | 
						||
| 
								 | 
							
								 * @param[in]   channelNum  Channel number, should be: 0..2
							 | 
						||
| 
								 | 
							
								 * @param[in]   countMode   Count mode, should be:
							 | 
						||
| 
								 | 
							
								 *                          - ENABLE: Enables count mode.
							 | 
						||
| 
								 | 
							
								 *                          - DISABLE: Disable count mode, the channel is in timer mode.
							 | 
						||
| 
								 | 
							
								 * @param[in]   countConfig Pointer to a MCPWM_COUNT_CFG_Type structure
							 | 
						||
| 
								 | 
							
								*                           that contains the configuration information for the
							 | 
						||
| 
								 | 
							
								*                           specified MCPWM count control.
							 | 
						||
| 
								 | 
							
								 * @return      None
							 | 
						||
| 
								 | 
							
								 **********************************************************************/
							 | 
						||
| 
								 | 
							
								void MCPWM_CountConfig(LPC_MCPWM_TypeDef *MCPWMx, uint32_t channelNum,
							 | 
						||
| 
								 | 
							
								                    uint32_t countMode, MCPWM_COUNT_CFG_Type *countConfig)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if (channelNum <= 2) {
							 | 
						||
| 
								 | 
							
								        if (countMode /* == ENABLE */){
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCNTCON_SET = MCPWM_CNTCON_CNTR(channelNum);
							 | 
						||
| 
								 | 
							
								            if (countConfig->countFalling /* == ENABLE */) {
							 | 
						||
| 
								 | 
							
								                MCPWMx->MCCNTCON_SET = MCPWM_CNTCON_TCMCI_FE(countConfig->counterChannel,channelNum);
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                MCPWMx->MCCNTCON_CLR = MCPWM_CNTCON_TCMCI_FE(countConfig->counterChannel,channelNum);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if (countConfig->countRising /* == ENABLE */) {
							 | 
						||
| 
								 | 
							
								                MCPWMx->MCCNTCON_SET = MCPWM_CNTCON_TCMCI_RE(countConfig->counterChannel,channelNum);
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                MCPWMx->MCCNTCON_CLR = MCPWM_CNTCON_TCMCI_RE(countConfig->counterChannel,channelNum);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            MCPWMx->MCCNTCON_CLR = MCPWM_CNTCON_CNTR(channelNum);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*********************************************************************//**
							 | 
						||
| 
								 | 
							
								 * @brief       Start MCPWM activity for each MCPWM channel
							 | 
						||
| 
								 | 
							
								 * @param[in]   MCPWMx      Motor Control PWM peripheral selected
							 | 
						||
| 
								 | 
							
								 *                          Should be: LPC_MCPWM
							 | 
						||
| 
								 | 
							
								 * @param[in]   channel0    State of this command on channel 0:
							 | 
						||
| 
								 | 
							
								 *                          - ENABLE: 'Start' command will effect on channel 0
							 | 
						||
| 
								 | 
							
								 *                          - DISABLE: 'Start' command will not effect on channel 0
							 | 
						||
| 
								 | 
							
								 * @param[in]   channel1    State of this command on channel 1:
							 | 
						||
| 
								 | 
							
								 *                          - ENABLE: 'Start' command will effect on channel 1
							 | 
						||
| 
								 | 
							
								 *                          - DISABLE: 'Start' command will not effect on channel 1
							 | 
						||
| 
								 | 
							
								 * @param[in]   channel2    State of this command on channel 2:
							 | 
						||
| 
								 | 
							
								 *                          - ENABLE: 'Start' command will effect on channel 2
							 | 
						||
| 
								 | 
							
								 *                          - DISABLE: 'Start' command will not effect on channel 2
							 | 
						||
| 
								 | 
							
								 * @return      None
							 | 
						||
| 
								 | 
							
								 **********************************************************************/
							 | 
						||
| 
								 | 
							
								void MCPWM_Start(LPC_MCPWM_TypeDef *MCPWMx, uint32_t channel0,
							 | 
						||
| 
								 | 
							
								                    uint32_t channel1, uint32_t channel2)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t regVal = 0;
							 | 
						||
| 
								 | 
							
								    regVal = (channel0 ? MCPWM_CON_RUN(0) : 0) | (channel1 ? MCPWM_CON_RUN(1) : 0) \
							 | 
						||
| 
								 | 
							
								                | (channel2 ? MCPWM_CON_RUN(2) : 0);
							 | 
						||
| 
								 | 
							
								    MCPWMx->MCCON_SET = regVal;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*********************************************************************//**
							 | 
						||
| 
								 | 
							
								 * @brief       Stop MCPWM activity for each MCPWM channel
							 | 
						||
| 
								 | 
							
								 * @param[in]   MCPWMx      Motor Control PWM peripheral selected
							 | 
						||
| 
								 | 
							
								 *                          Should be: LPC_MCPWM
							 | 
						||
| 
								 | 
							
								 * @param[in]   channel0    State of this command on channel 0:
							 | 
						||
| 
								 | 
							
								 *                          - ENABLE: 'Stop' command will effect on channel 0
							 | 
						||
| 
								 | 
							
								 *                          - DISABLE: 'Stop' command will not effect on channel 0
							 | 
						||
| 
								 | 
							
								 * @param[in]   channel1    State of this command on channel 1:
							 | 
						||
| 
								 | 
							
								 *                          - ENABLE: 'Stop' command will effect on channel 1
							 | 
						||
| 
								 | 
							
								 *                          - DISABLE: 'Stop' command will not effect on channel 1
							 | 
						||
| 
								 | 
							
								 * @param[in]   channel2    State of this command on channel 2:
							 | 
						||
| 
								 | 
							
								 *                          - ENABLE: 'Stop' command will effect on channel 2
							 | 
						||
| 
								 | 
							
								 *                          - DISABLE: 'Stop' command will not effect on channel 2
							 | 
						||
| 
								 | 
							
								 * @return      None
							 | 
						||
| 
								 | 
							
								 **********************************************************************/
							 | 
						||
| 
								 | 
							
								void MCPWM_Stop(LPC_MCPWM_TypeDef *MCPWMx, uint32_t channel0,
							 | 
						||
| 
								 | 
							
								        uint32_t channel1, uint32_t channel2)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t regVal = 0;
							 | 
						||
| 
								 | 
							
								    regVal = (channel0 ? MCPWM_CON_RUN(0) : 0) | (channel1 ? MCPWM_CON_RUN(1) : 0) \
							 | 
						||
| 
								 | 
							
								                | (channel2 ? MCPWM_CON_RUN(2) : 0);
							 | 
						||
| 
								 | 
							
								    MCPWMx->MCCON_CLR = regVal;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*********************************************************************//**
							 | 
						||
| 
								 | 
							
								 * @brief       Enables/Disables 3-phase AC motor mode on MCPWM peripheral
							 | 
						||
| 
								 | 
							
								 * @param[in]   MCPWMx      Motor Control PWM peripheral selected
							 | 
						||
| 
								 | 
							
								 *                          Should be: LPC_MCPWM
							 | 
						||
| 
								 | 
							
								 * @param[in]   acMode      State of this command, should be:
							 | 
						||
| 
								 | 
							
								 *                          - ENABLE.
							 | 
						||
| 
								 | 
							
								 *                          - DISABLE.
							 | 
						||
| 
								 | 
							
								 * @return      None
							 | 
						||
| 
								 | 
							
								 **********************************************************************/
							 | 
						||
| 
								 | 
							
								void MCPWM_ACMode(LPC_MCPWM_TypeDef *MCPWMx, uint32_t acMode)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if (acMode){
							 | 
						||
| 
								 | 
							
								        MCPWMx->MCCON_SET = MCPWM_CON_ACMODE;
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        MCPWMx->MCCON_CLR = MCPWM_CON_ACMODE;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*********************************************************************//**
							 | 
						||
| 
								 | 
							
								 * @brief       Enables/Disables 3-phase DC motor mode on MCPWM peripheral
							 | 
						||
| 
								 | 
							
								 * @param[in]   MCPWMx          Motor Control PWM peripheral selected
							 | 
						||
| 
								 | 
							
								 *                              Should be: LPC_MCPWM
							 | 
						||
| 
								 | 
							
								 * @param[in]   dcMode          State of this command, should be:
							 | 
						||
| 
								 | 
							
								 *                              - ENABLE.
							 | 
						||
| 
								 | 
							
								 *                              - DISABLE.
							 | 
						||
| 
								 | 
							
								 * @param[in]   outputInvered   Polarity of the MCOB outputs for all 3 channels,
							 | 
						||
| 
								 | 
							
								 *                              should be:
							 | 
						||
| 
								 | 
							
								 *                              - ENABLE: The MCOB outputs have opposite polarity
							 | 
						||
| 
								 | 
							
								 *                                  from the MCOA outputs.
							 | 
						||
| 
								 | 
							
								 *                              - DISABLE: The MCOB outputs have the same basic
							 | 
						||
| 
								 | 
							
								 *                                  polarity as the MCOA outputs.
							 | 
						||
| 
								 | 
							
								 * @param[in]   outputPattern   A value contains bits that enables/disables the specified
							 | 
						||
| 
								 | 
							
								 *                              output pins route to the internal MCOA0 signal, should be:
							 | 
						||
| 
								 | 
							
								                                - MCPWM_PATENT_A0:   MCOA0 tracks internal MCOA0
							 | 
						||
| 
								 | 
							
								                                - MCPWM_PATENT_B0:   MCOB0 tracks internal MCOA0
							 | 
						||
| 
								 | 
							
								                                - MCPWM_PATENT_A1:   MCOA1 tracks internal MCOA0
							 | 
						||
| 
								 | 
							
								                                - MCPWM_PATENT_B1:   MCOB1 tracks internal MCOA0
							 | 
						||
| 
								 | 
							
								                                - MCPWM_PATENT_A2:   MCOA2 tracks internal MCOA0
							 | 
						||
| 
								 | 
							
								                                - MCPWM_PATENT_B2:   MCOB2 tracks internal MCOA0
							 | 
						||
| 
								 | 
							
								 * @return      None
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Note: all these outputPatent values above can be ORed together for using as input parameter.
							 | 
						||
| 
								 | 
							
								 **********************************************************************/
							 | 
						||
| 
								 | 
							
								void MCPWM_DCMode(LPC_MCPWM_TypeDef *MCPWMx, uint32_t dcMode,
							 | 
						||
| 
								 | 
							
								                    uint32_t outputInvered, uint32_t outputPattern)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if (dcMode){
							 | 
						||
| 
								 | 
							
								        MCPWMx->MCCON_SET = MCPWM_CON_DCMODE;
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        MCPWMx->MCCON_CLR = MCPWM_CON_DCMODE;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (outputInvered) {
							 | 
						||
| 
								 | 
							
								        MCPWMx->MCCON_SET = MCPWM_CON_INVBDC;
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        MCPWMx->MCCON_CLR = MCPWM_CON_INVBDC;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    MCPWMx->MCCCP = outputPattern;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*********************************************************************//**
							 | 
						||
| 
								 | 
							
								 * @brief       Configures the specified interrupt in MCPWM peripheral
							 | 
						||
| 
								 | 
							
								 * @param[in]   MCPWMx      Motor Control PWM peripheral selected
							 | 
						||
| 
								 | 
							
								 *                          Should be: LPC_MCPWM
							 | 
						||
| 
								 | 
							
								 * @param[in]   ulIntType   Interrupt type, should be:
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_LIM0: Limit interrupt for channel (0)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_MAT0: Match interrupt for channel (0)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_CAP0: Capture interrupt for channel (0)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_LIM1: Limit interrupt for channel (1)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_MAT1: Match interrupt for channel (1)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_CAP1: Capture interrupt for channel (1)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_LIM2: Limit interrupt for channel (2)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_MAT2: Match interrupt for channel (2)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_CAP2: Capture interrupt for channel (2)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_ABORT: Fast abort interrupt
							 | 
						||
| 
								 | 
							
								 * @param[in]   NewState    New State of this command, should be:
							 | 
						||
| 
								 | 
							
								 *                          - ENABLE.
							 | 
						||
| 
								 | 
							
								 *                          - DISABLE.
							 | 
						||
| 
								 | 
							
								 * @return      None
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Note: all these ulIntType values above can be ORed together for using as input parameter.
							 | 
						||
| 
								 | 
							
								 **********************************************************************/
							 | 
						||
| 
								 | 
							
								void MCPWM_IntConfig(LPC_MCPWM_TypeDef *MCPWMx, uint32_t ulIntType, FunctionalState NewState)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if (NewState) {
							 | 
						||
| 
								 | 
							
								        MCPWMx->MCINTEN_SET = ulIntType;
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        MCPWMx->MCINTEN_CLR = ulIntType;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*********************************************************************//**
							 | 
						||
| 
								 | 
							
								 * @brief       Sets/Forces the specified interrupt for MCPWM peripheral
							 | 
						||
| 
								 | 
							
								 * @param[in]   MCPWMx      Motor Control PWM peripheral selected
							 | 
						||
| 
								 | 
							
								 *                          Should be LPC_MCPWM
							 | 
						||
| 
								 | 
							
								 * @param[in]   ulIntType   Interrupt type, should be:
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_LIM0: Limit interrupt for channel (0)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_MAT0: Match interrupt for channel (0)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_CAP0: Capture interrupt for channel (0)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_LIM1: Limit interrupt for channel (1)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_MAT1: Match interrupt for channel (1)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_CAP1: Capture interrupt for channel (1)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_LIM2: Limit interrupt for channel (2)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_MAT2: Match interrupt for channel (2)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_CAP2: Capture interrupt for channel (2)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_ABORT: Fast abort interrupt
							 | 
						||
| 
								 | 
							
								 * @return      None
							 | 
						||
| 
								 | 
							
								 * Note: all these ulIntType values above can be ORed together for using as input parameter.
							 | 
						||
| 
								 | 
							
								 **********************************************************************/
							 | 
						||
| 
								 | 
							
								void MCPWM_IntSet(LPC_MCPWM_TypeDef *MCPWMx, uint32_t ulIntType)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    MCPWMx->MCINTFLAG_SET = ulIntType;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*********************************************************************//**
							 | 
						||
| 
								 | 
							
								 * @brief       Clear the specified interrupt pending for MCPWM peripheral
							 | 
						||
| 
								 | 
							
								 * @param[in]   MCPWMx      Motor Control PWM peripheral selected,
							 | 
						||
| 
								 | 
							
								 *                          should be: LPC_MCPWM
							 | 
						||
| 
								 | 
							
								 * @param[in]   ulIntType   Interrupt type, should be:
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_LIM0: Limit interrupt for channel (0)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_MAT0: Match interrupt for channel (0)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_CAP0: Capture interrupt for channel (0)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_LIM1: Limit interrupt for channel (1)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_MAT1: Match interrupt for channel (1)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_CAP1: Capture interrupt for channel (1)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_LIM2: Limit interrupt for channel (2)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_MAT2: Match interrupt for channel (2)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_CAP2: Capture interrupt for channel (2)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_ABORT: Fast abort interrupt
							 | 
						||
| 
								 | 
							
								 * @return      None
							 | 
						||
| 
								 | 
							
								 * Note: all these ulIntType values above can be ORed together for using as input parameter.
							 | 
						||
| 
								 | 
							
								 **********************************************************************/
							 | 
						||
| 
								 | 
							
								void MCPWM_IntClear(LPC_MCPWM_TypeDef *MCPWMx, uint32_t ulIntType)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    MCPWMx->MCINTFLAG_CLR = ulIntType;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*********************************************************************//**
							 | 
						||
| 
								 | 
							
								 * @brief       Check whether if the specified interrupt in MCPWM is set or not
							 | 
						||
| 
								 | 
							
								 * @param[in]   MCPWMx      Motor Control PWM peripheral selected,
							 | 
						||
| 
								 | 
							
								 *                          should be: LPC_MCPWM
							 | 
						||
| 
								 | 
							
								 * @param[in]   ulIntType   Interrupt type, should be:
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_LIM0: Limit interrupt for channel (0)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_MAT0: Match interrupt for channel (0)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_CAP0: Capture interrupt for channel (0)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_LIM1: Limit interrupt for channel (1)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_MAT1: Match interrupt for channel (1)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_CAP1: Capture interrupt for channel (1)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_LIM2: Limit interrupt for channel (2)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_MAT2: Match interrupt for channel (2)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_CAP2: Capture interrupt for channel (2)
							 | 
						||
| 
								 | 
							
								 *                          - MCPWM_INTFLAG_ABORT: Fast abort interrupt
							 | 
						||
| 
								 | 
							
								 * @return      None
							 | 
						||
| 
								 | 
							
								 **********************************************************************/
							 | 
						||
| 
								 | 
							
								FlagStatus MCPWM_GetIntStatus(LPC_MCPWM_TypeDef *MCPWMx, uint32_t ulIntType)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return ((MCPWMx->MCINTFLAG & ulIntType) ? SET : RESET);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @}
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif /* _MCPWM */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @}
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* --------------------------------- End Of File ------------------------------ */
							 |