⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc.c

📁 编译后直接运行的MP3播放器全部C语言源代码 一个包含FAT文件系统、系统引导 Boot、FLASH Driver等内容的
💻 C
字号:
/*************************************************************************** *             __________               __   ___. *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___ *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  / *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  < *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \ *                     \/            \/     \/    \/            \/ * $Id: adc.c,v 1.7 2004/01/20 11:57:50 linusnielsen Exp $ * * Copyright (C) 2002 by Linus Nielsen Feltzing * * All files in this archive are subject to the GNU General Public License. * See the file COPYING in the source tree root for full license agreement. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ****************************************************************************/#include "config.h"#include "sh7034.h"#include "kernel.h"#include "thread.h"#include "adc.h"static int current_channel;static unsigned short adcdata[NUM_ADC_CHANNELS];static unsigned int adcreg[NUM_ADC_CHANNELS] ={    ADDRAH_ADDR, ADDRBH_ADDR, ADDRCH_ADDR, ADDRDH_ADDR,    ADDRAH_ADDR, ADDRBH_ADDR, ADDRCH_ADDR, ADDRDH_ADDR};static void adc_tick(void){    /* Read the data that has bee converted since the last tick */    adcdata[current_channel] =    *(unsigned short *)adcreg[current_channel] >> 6;    /* Start a conversion on the next channel */    current_channel++;    if(current_channel == NUM_ADC_CHANNELS)        current_channel = 0;    ADCSR = ADCSR_ADST | current_channel;}unsigned short adc_read(int channel){    return adcdata[channel];}/* Batch convert 4 analog channels. If lower is true, convert AN0-AN3,  * otherwise AN4-AN7.  */static void adc_batch_convert(bool lower){    int reg = lower ? 0 : 4;    volatile unsigned short* ANx = ((unsigned short*) ADDRAH_ADDR);    int i;    ADCSR = ADCSR_ADST | ADCSR_SCAN | reg | 3;    /* Busy wait until conversion is complete. A bit ugly perhaps, but      * we should only need to wait about 4 * 14 祍  */    while(!(ADCSR & ADCSR_ADF))    {    }    /* Stop scanning */    ADCSR = 0;    for (i = 0; i < 4; i++)    {        /* Read converted values */        adcdata[reg++] = ANx[i] >> 6;    }}void adc_init(void){    ADCR  = 0x7f; /* No external trigger; other bits should be 1 according to the manual... */    current_channel = 0;    /* Do a first scan to initialize all values */    /* AN4 to AN7 */    adc_batch_convert(false);    /* AN0 to AN3 */    adc_batch_convert(true);        tick_add_task(adc_tick);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -