/* Copyright Statement: * * This software/firmware and related documentation ("AutoChips Software") are * protected under relevant copyright laws. The information contained herein is * confidential and proprietary to AutoChips Inc. and/or its licensors. Without * the prior written permission of AutoChips inc. and/or its licensors, any * reproduction, modification, use or disclosure of AutoChips Software, and * information contained herein, in whole or in part, shall be strictly * prohibited. * * AutoChips Inc. (C) 2016. All rights reserved. * * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("AUTOCHIPS SOFTWARE") * RECEIVED FROM AUTOCHIPS AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER * ON AN "AS-IS" BASIS ONLY. AUTOCHIPS EXPRESSLY DISCLAIMS ANY AND ALL * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR * NONINFRINGEMENT. NEITHER DOES AUTOCHIPS PROVIDE ANY WARRANTY WHATSOEVER WITH * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, * INCORPORATED IN, OR SUPPLIED WITH THE AUTOCHIPS SOFTWARE, AND RECEIVER AGREES * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN AUTOCHIPS * SOFTWARE. AUTOCHIPS SHALL ALSO NOT BE RESPONSIBLE FOR ANY AUTOCHIPS SOFTWARE * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND AUTOCHIPS'S * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE AUTOCHIPS SOFTWARE * RELEASED HEREUNDER WILL BE, AT AUTOCHIPS'S OPTION, TO REVISE OR REPLACE THE * AUTOCHIPS SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE * CHARGE PAID BY RECEIVER TO AUTOCHIPS FOR SUCH AUTOCHIPS SOFTWARE AT ISSUE. */ /********************/ #include "adc.h" #include "timer.h" /*****************/ uint8_t g_dmaFinish = 0;//DMA传输完成 uint8_t g_halfDmaFinish = 0; //DMA传输半完成 uint8_t g_dmaTransError = 0; //DMA传输错误 uint16_t __align(2) g_ADCValueBuffer[ADC_SAMPLE_CHANNEL*ADC_FILTER_NUM] = {0}; uint32_t g_timer0Cnt = 0; //uint32_t g_averageSampleValue = 0; /** * ADC_DMACallback * * @param[in] wpara:dmaChannelStatus * lpara:0 * @return 0 * * @brief ADC DMA中断回调函数。 */ void ADC_DMACallback(void *device, uint32_t wpara, uint32_t lpara) { /* wparam为DMA通道状态,状态含义可参考CHANNELx_STATUS寄存器, CHANNELx_STATUS[2] 传输错误 CHANNELx_STATUS[1] 半传输完成(相对设置的transferNum,如果半传输中断有使能,transferNum设为6,则DATA_TRANS_NUM为3时产生中断,进入回调) CHANNELx_STATUS[0] 传输完成 */ if ((wpara & 0x01) == 0x1) { g_dmaFinish = 1; } if ((wpara & 0x02) == 0x2) { g_halfDmaFinish = 1; } if ((wpara & 0x04) == 0x4) { g_dmaTransError = 1; } } /** * ADC_DMAInit * * @param[in] void * @return void * * @brief ADC DMA初始化,配置DMA相关参数。 */ void ADC_DMAInit(void) { DMA_ConfigType tmpDMAConfig; memset(&tmpDMAConfig, 0x00, sizeof(DMA_ConfigType)); tmpDMAConfig.channelEn = ENABLE; ///<使能DMAx通道 tmpDMAConfig.finishInterruptEn = ENABLE; ///<使能DMA传输完成中断 tmpDMAConfig.halfFinishInterruptEn = DISABLE; ///<去能DMA半传输完成中断 tmpDMAConfig.errorInterruptEn = ENABLE; ///<使能DMA传输错误中断 tmpDMAConfig.channelPriority = DMA_PRIORITY_VERY_HIGH;///<设置DMA通道优先级,0~3 :优先级由低到高 tmpDMAConfig.circular = ENABLE; ///<使能循环模式,如果只想工作一次,设为0即可。 tmpDMAConfig.direction = DMA_READ_FROM_PERIPH; ///<0: 从外设读取,1:从存储器读取 tmpDMAConfig.MEM2MEM = DISABLE; ///<0:在非存储器与存储器之间传输,1:在存储器与存储器之间传输 tmpDMAConfig.memByteMode = DMA_MEM_BYTE_MODE_1TIME; ///RDR)); ///scanModeEn = ENABLE; //扫描模式 adcConfig->continousModeEn = DISABLE; //连续模式 adcConfig->regularDiscontinousModeEn = DISABLE; //1:打开规则组间断转换模式 adcConfig->injectDiscontinousModeEn = DISABLE; //1:打开注入组间断转换模式 adcConfig->injectAutoModeEn = DISABLE; //1:自动注入模式 adcConfig->intervalModeEn = DISABLE; //1:注入组为间隔转换模式 adcConfig->regularDiscontinousNum = 0; // adcConfig->EOCInterruptEn = DISABLE; //EOC中断去能 adcConfig->IEOCInterruptEn = DISABLE; //IEOC中断去能 adcConfig->interruptEn = DISABLE; //去能中断 adcConfig->regularDMAEn = ENABLE; //使能ADC DMA adcConfig->regularTriggerMode = ADC_TRIGGER_EXTERNAL;//ADC触发源,外部触发 //adcConfig->injectTriggerMode = ADC_TRIGGER_INTERNAL; //ADC触发源,内部触发 adcConfig->regularSequenceLength = ADC_SAMPLE_CHANNEL; //规则组长度设为1 //adcConfig->injectSequenceLength = 0; //注入组长度设为0 adcConfig->dataAlign = ADC_DATA_ALIGN_RIGHT; //右对齐 adcConfig->powerMode = ADC_POWER_ON; //上电 adcConfig->clkPsc = ADC_CLK_PRESCALER_1; ///*********/