153 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			153 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /**********************************************************************
 | |||
|  | * $Id$		lpc43xx_dac.c		2011-06-02 | |||
|  | *//**
 | |||
|  | * @file		lpc43xx_dac.c | |||
|  | * @brief	Contains all functions support for DAC firmware library on lpc43xx | |||
|  | * @version	1.0 | |||
|  | * @date		02. June. 2011 | |||
|  | * @author	NXP MCU SW Application Team | |||
|  | * | |||
|  | * Copyright(C) 2011, 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<EFBFBD> | |||
|  | * 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 DAC
 | |||
|  |  * @{ | |||
|  |  */ | |||
|  | 
 | |||
|  | /* Includes ------------------------------------------------------------------- */ | |||
|  | #include "lpc43xx_dac.h"
 | |||
|  | #include "lpc43xx_cgu.h"
 | |||
|  | 
 | |||
|  | /* If this source file built with example, the lpc43xx FW library configuration
 | |||
|  |  * file in each example directory ("lpc43xx_libcfg.h") must be included, | |||
|  |  * otherwise the default FW library configuration file must be included instead | |||
|  |  */ | |||
|  | #ifdef __BUILD_WITH_EXAMPLE__
 | |||
|  | #include "lpc43xx_libcfg.h"
 | |||
|  | #else
 | |||
|  | #include "lpc43xx_libcfg_default.h"
 | |||
|  | #endif /* __BUILD_WITH_EXAMPLE__ */
 | |||
|  | 
 | |||
|  | 
 | |||
|  | #ifdef _DAC
 | |||
|  | 
 | |||
|  | /* Public Functions ----------------------------------------------------------- */ | |||
|  | /** @addtogroup DAC_Public_Functions
 | |||
|  |  * @{ | |||
|  |  */ | |||
|  | 
 | |||
|  | /*********************************************************************//**
 | |||
|  |  * @brief 		Initial ADC configuration | |||
|  |  * 					- Maximum	current is 700 uA | |||
|  |  * 					- Value to AOUT is 0 | |||
|  |  * @param[in] 	DACx pointer to LPC_DAC_Type, should be: LPC_DAC | |||
|  |  * @return 		None | |||
|  |  ***********************************************************************/ | |||
|  | void DAC_Init(LPC_DAC_Type *DACx) | |||
|  | { | |||
|  | 	CHECK_PARAM(PARAM_DACx(DACx)); | |||
|  | 	/* Set default clock divider for DAC */ | |||
|  | 	//LPC_CGU->BASE_VPB3_CLK = (SRC_PL160M_0<<24) | (1<<11);	// ABP3 base clock use PLL1 and auto block
 | |||
|  | 	CGU_EntityConnect(CGU_CLKSRC_PLL1, CGU_BASE_APB3); | |||
|  | 	//Set maximum current output
 | |||
|  | 	DAC_SetBias(LPC_DAC,DAC_MAX_CURRENT_700uA); | |||
|  | } | |||
|  | 
 | |||
|  | /*********************************************************************//**
 | |||
|  |  * @brief 		Update value to DAC | |||
|  |  * @param[in] 	DACx pointer to LPC_DAC_Type, should be: LPC_DAC | |||
|  |  * @param[in] 	dac_value  value 10 bit to be converted to output | |||
|  |  * @return 		None | |||
|  |  ***********************************************************************/ | |||
|  | void DAC_UpdateValue (LPC_DAC_Type *DACx,uint32_t dac_value) | |||
|  | { | |||
|  | 	uint32_t tmp; | |||
|  | 	CHECK_PARAM(PARAM_DACx(DACx)); | |||
|  | 	tmp = DACx->CR & DAC_BIAS_EN; | |||
|  | 	tmp |= DAC_VALUE(dac_value); | |||
|  | 	// Update value
 | |||
|  | 	DACx->CR = tmp; | |||
|  | } | |||
|  | 
 | |||
|  | /*********************************************************************//**
 | |||
|  |  * @brief 		Set Maximum current for DAC | |||
|  |  * @param[in] 	DACx pointer to LPC_DAC_Type, should be: LPC_DAC | |||
|  |  * @param[in] 	bias	Using Bias value, should be: | |||
|  |  * 				- 0 is 700 uA | |||
|  |  * 				- 1 is 350 uA | |||
|  |  * @return 		None | |||
|  |  ***********************************************************************/ | |||
|  | void DAC_SetBias (LPC_DAC_Type *DACx,uint32_t bias) | |||
|  | { | |||
|  | 	CHECK_PARAM(PARAM_DAC_CURRENT_OPT(bias)); | |||
|  | 	DACx->CR &=~DAC_BIAS_EN; | |||
|  | 	if (bias  == DAC_MAX_CURRENT_350uA) | |||
|  | 	{ | |||
|  | 		DACx->CR |= DAC_BIAS_EN; | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | /*********************************************************************//**
 | |||
|  |  * @brief 		To enable the DMA operation and control DMA timer | |||
|  |  * @param[in]	DACx pointer to LPC_DAC_Type, should be: LPC_DAC | |||
|  |  * @param[in] 	DAC_ConverterConfigStruct pointer to DAC_CONVERTER_CFG_Type | |||
|  |  * 					- DBLBUF_ENA :enable/disable DACR double buffering feature | |||
|  |  * 					- CNT_ENA    :enable/disable timer out counter | |||
|  |  * 					- DMA_ENA    :enable/disable DMA access | |||
|  |  * @return 		None | |||
|  |  ***********************************************************************/ | |||
|  | void DAC_ConfigDAConverterControl (LPC_DAC_Type *DACx,DAC_CONVERTER_CFG_Type *DAC_ConverterConfigStruct) | |||
|  | { | |||
|  | 	CHECK_PARAM(PARAM_DACx(DACx)); | |||
|  | 	DACx->CTRL &= ~DAC_DACCTRL_MASK; | |||
|  | 	if (DAC_ConverterConfigStruct->DBLBUF_ENA) | |||
|  | 		DACx->CTRL	|= DAC_DBLBUF_ENA; | |||
|  | 	if (DAC_ConverterConfigStruct->CNT_ENA) | |||
|  | 		DACx->CTRL	|= DAC_CNT_ENA; | |||
|  | 	if (DAC_ConverterConfigStruct->DMA_ENA) | |||
|  | 		DACx->CTRL	|= DAC_DMA_ENA; | |||
|  | } | |||
|  | 
 | |||
|  | /*********************************************************************//**
 | |||
|  |  * @brief 		Set reload value for interrupt/DMA counter | |||
|  |  * @param[in] 	DACx pointer to LPC_DAC_Type, should be: LPC_DAC | |||
|  |  * @param[in] 	time_out time out to reload for interrupt/DMA counter | |||
|  |  * @return 		None | |||
|  |  ***********************************************************************/ | |||
|  | void DAC_SetDMATimeOut(LPC_DAC_Type *DACx, uint32_t time_out) | |||
|  | { | |||
|  | 	CHECK_PARAM(PARAM_DACx(DACx)); | |||
|  | 	DACx->CNTVAL = DAC_CCNT_VALUE(time_out); | |||
|  | } | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @} | |||
|  |  */ | |||
|  | 
 | |||
|  | #endif /* _DAC */
 | |||
|  | 
 | |||
|  | /**
 | |||
|  |  * @} | |||
|  |  */ | |||
|  | 
 |