📄 adc.c
字号:
#include "AT91SAM7S64.H"
/**********************************************
ADC初始化
**********************************************/
void ADC_Init(void)
{
*AT91C_ADC_CR|=(1<<0);//软件复位ADC
//*AT91C_PMC_SCER=(1<<0);//使能处理器时钟
//*AT91C_PMC_PCER=(1<<4);
//*AT91C_PIOA_PDR=(1<<20);
*AT91C_ADC_MR= (0<<0)//硬件触发禁用
|(1<<4)//8位分辨率
|(0<<5)//休眠模式
|(127<<8)//MSK/256
|(0X1F<<16)
|(0X0F<<24);
*AT91C_ADC_CHER=(1<<3);//使能通道3
*AT91C_ADC_IDR=0x000fffff;//禁用所有的中断
}
/***********************************************
函数功能:读取通道n的转换结果(8位分辨率)
输入参数:n——通道数
返回值 :转换结果
备注 :返回值必须为int
***********************************************/
unsigned int Read_Channel(unsigned char n)
{
while(1)
{
if(((*AT91C_ADC_SR)&(1<<n))) //如果转换完成
{
switch(n)
{
case 0:
return((*(AT91C_ADC_CDR0))&0x000000ff); //返回转换结果
case 1:
return((*(AT91C_ADC_CDR1))&0x000000ff); //返回转换结果
case 2:
return((*(AT91C_ADC_CDR2))&0x000000ff); //返回转换结果
case 3:
return((*(AT91C_ADC_CDR3))&0x000000ff); //返回转换结果
case 4:
return((*(AT91C_ADC_CDR4))&0x000000ff); //返回转换结果
case 5:
return((*(AT91C_ADC_CDR5))&0x000000ff); //返回转换结果
case 6:
return((*(AT91C_ADC_CDR6))&0x000000ff); //返回转换结果
case 7:
return((*(AT91C_ADC_CDR7))&0x000000ff); //返回转换结果
}
}
}
}
/***********************************************************************
函数功能:设置并启动DMA。
入口参数:Addr: 接收数据的缓冲区地址;Count:要接收的数量。
返 回:无。
备 注:无。
***********************************************************************/
void SET_ADC_DMA(unsigned int *Addr, int Count)
{
*AT91C_ADC_RPR=(unsigned int)Addr; //设置地址
*AT91C_ADC_RCR=Count; //设置数量
*AT91C_ADC_PTCR=(1<<0); //启动接收
}
/********************************************************************
函数功能:等待ADC的DMA传输完成。
入口参数:无。
返 回:无。
备 注:无。
********************************************************************/
void WAIT_ADC_DMA_FINISH(void)
{
while((*AT91C_ADC_RCR)!=0); //当未接收完时,等待
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -