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

📄 adc.c

📁 AT91SAM7S64de ADC 采样子程序
💻 C
字号:

*******************************************************************/

#include <AT91SAM7S64.H>
#include "ADC.h"

/********************************************************************
函数功能:ADC初始化函数。
入口参数:无。
返    回:无。
备    注:无。
********************************************************************/
void AdcInit(void)
{
 AdcReset();
 *AT91C_ADC_MR=(1<<0)  //Hardware trigger selected by TRGSEL field is enabled.
              |(0<<1)  //TIOA Ouput of the Timer Counter Channel 0
              |(0<<4)  //10-bit resolution
              |(0<<5)  //Normal Mode
              |(4<<8)  //Prescaler Rate Selection, ADCClock = MCK/10 = 4.8MHz
              |(24<<16) //Startup Time=(24+1)*8/ADCClock is about 20us.
              |(5<<24);  //Sample & Hold Time = 5/ADCClock is about 1us.
              
 *AT91C_ADC_CHDR=0xFF; //Disable all channel.             
 *AT91C_ADC_CHER=(1<<6);  //Enable CH6
 *AT91C_ADC_IDR=0xFFFFF;  //Disable all ADC interrupt.
}
/////////////////////////End of function/////////////////////////////

/********************************************************************
函数功能:软件转换并读取一次ADC。
入口参数:ch:通道号。
返    回:ADC值。
备    注:无。
********************************************************************/
int AdcRead(void)
{
 AdcStartConversion(); //软件启动转换
 while(!((*AT91C_ADC_SR)&(1<<16)));  //等待转换完毕
 return *AT91C_ADC_LCDR;  //读取ADC值
}
/////////////////////////End of function/////////////////////////////


/********************************************************************
函数功能:设置DMA。
入口参数:Addr: 接收数据的缓冲区地址;Count:要接收的数量。
返    回:无。
备    注:无。
********************************************************************/
void AdcSetupDma(short int *Addr, int Count)
{
 *AT91C_ADC_RPR=(unsigned int)Addr;   //设置地址
 *AT91C_ADC_RCR=Count;  //设置数量
 *AT91C_ADC_PTCR=(1<<0);  //启动接收
}
/////////////////////////End of function/////////////////////////////

/********************************************************************
函数功能:等待ADC的DMA传输完成。
入口参数:无。
返    回:无。
备    注:无。
********************************************************************/
void AdcWaitDmaFinish(void)
{
 while((*AT91C_ADC_RCR)!=0); //当未接收完时,等待
}
/////////////////////////End of function/////////////////////////////

⌨️ 快捷键说明

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