我是靠谱客的博主 帅气海燕,这篇文章主要介绍ADC,现在分享给大家,希望可以做个参考。

/*-----------------------------------------------------
功能:利用CPU定时器中断进行AD转换,并串口发送
-----------------------------------------------------*/
#include"DSP281x_Device.h"
#include "DSP281x_Examples.h"
#define ADC_MODCLK 0X3
#define ADC_CKPS 0X1
#define ADC_SHCLK 0Xf
Uint16 ReceivedChar;
interrupt void cpu_timer0_isr();
void Delay();
void Scib_init();
void Scib_xmit(Uint16 a);
void Inadc_init();
void IN_ADCheck();
void main(void)
{
InitSysCtrl();
EALLOW;
SysCtrlRegs.HISPCP.all=ADC_MODCLK;
EDIS;
DINT;
//禁止和清除所有CPU中断向量表
InitPieCtrl();
//初始化PIE控制器
IER=0x0000;
IFR=0x0000;
InitPieVectTable(); //初始化中断向量表
EALLOW;
PieVectTable.TINT0=&cpu_timer0_isr;
//设置中断函数
EDIS;
InitCpuTimers();
ConfigCpuTimer(&CpuTimer0,100,1000);
StartCpuTimer0();
IER|=M_INT1;
PieCtrlRegs.PIEIER1.bit.INTx7=1;
//开放cpuINT1.7,对应到连接外设ADC.
EINT;
ERTM;
Inadc_init();
Scib_init();
EALLOW;
GpioMuxRegs.GPGMUX.all|=0x0030;
//使能SCIB口
EDIS;
for(;;);
}
/*************定时中断函数*******************/
interrupt void cpu_timer0_isr()
{
IN_ADCheck();
PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;
//允许继续响应中断
}
void Delay()
{
Uint16 i;
for(i=0;i<0xffff;i++)
{
asm("NOP");
}
}
/*************串口初始化函数******************/
void Scib_init()
{
ScibRegs.SCIFFTX.all=0xe040;
//使能FIFO,允许发送,清除TXFFINT,禁止TX FIFO中断
ScibRegs.SCIFFRX.all=0x2021;
//允许接收,清除RXFFINT,使能RX FIFO中断(1级)
ScibRegs.SCIFFTX.all=0x0000;
//禁止波特率检验
ScibRegs.SCICCR.all=0x0007;
//1个停止位,8位数据位,无奇偶校验,空闲线模式
ScibRegs.SCICTL1.all=0x0003;
ScibRegs.SCICTL2.all=0x0003;
//SCI发送.接收使能和各中断使能
ScibRegs.SCIHBAUD=0x0001;
ScibRegs.SCILBAUD=0x00e7;
//波特率9600bps
ScibRegs.SCICTL1.all=0x0023;
//这句一直不明白什么意思
}
/**********串口发送函数**************/
void Scib_xmit(Uint16 a)
{
ScibRegs.SCITXBUF=(a&0xff);
while(ScibRegs.SCICTL2.bit.TXRDY!=1);
//写a进SCI TXBUF,当TXRDY=0时,发送寄存器满
while(SciaRegs.SCICTL2.bit.TXEMPTY!=1);
//当发送寄存器和移位寄存器都被装入数据,准备发送数据
}
/**************AD初始化函数*******************/
void Inadc_init()
{
AdcRegs.ADCTRL3.bit.ADCBGRFDN=0x3;
//带间隙和参考电路上电
Delay();
AdcRegs.ADCTRL3.bit.ADCPWDN=1;
//其他电路(指模拟电路)上电
Delay();
AdcRegs.ADCTRL1.bit.ACQ_PS=ADC_SHCLK;
//SOC脉宽为ADC_SHCLK+1;
AdcRegs.ADCTRL3.bit.SMODE_SEL=1;
//同步采样
AdcRegs.ADCTRL1.bit.SEQ_CASC=1;
//级联模式
AdcRegs.ADCTRL1.bit.CPS=1;
AdcRegs.ADCTRL3.bit.ADCCLKPS=ADC_CKPS;
//ADCCLKPS和CPS共同决定ADCCLK.具体见表格和流程图
AdcRegs.ADCMAXCONV.all=0x0007;
AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;
//A0B0作为转换通道
AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x1;
AdcRegs.ADCCHSELSEQ1.bit.CONV02=0x2;
AdcRegs.ADCCHSELSEQ1.bit.CONV03=0x3;
AdcRegs.ADCCHSELSEQ2.bit.CONV04=0x4;
AdcRegs.ADCCHSELSEQ2.bit.CONV05=0x5;
AdcRegs.ADCCHSELSEQ2.bit.CONV06=0x6;
AdcRegs.ADCCHSELSEQ2.bit.CONV07=0x7;
AdcRegs.ADCTRL1.bit.CONT_RUN=1;
}
/****************读取AD值,并且将数据发送至串口*******************/
void IN_ADCheck()
{
AdcRegs.ADCTRL2.all=0x2000;
//软件触发
while(AdcRegs.ADCST.bit.INT_SEQ1==0);
//等待进入中断,表示每个SEQ1排序转换结束。
//SEQ1使用的是MAX CONVn的后三位,本例为7,同步级联为8对
Delay();
AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;
//清除中断标志位
/*********以上为16路AD数据转换完成************/
ReceivedChar=(AdcRegs.ADCRESULT0>>4);
//结果数据缓冲器存储的转换数据为左对齐,故需要右移4位
Scib_xmit(ReceivedChar&0xff);
ReceivedChar=(AdcRegs.ADCRESULT1>>4);
Scib_xmit(ReceivedChar&0xff);
ReceivedChar=(AdcRegs.ADCRESULT2>>4);
Scib_xmit(ReceivedChar&0xff);
ReceivedChar=(AdcRegs.ADCRESULT3>>4);
Scib_xmit(ReceivedChar&0xff);
ReceivedChar=(AdcRegs.ADCRESULT4>>4);
Scib_xmit(ReceivedChar&0xff);
ReceivedChar=(AdcRegs.ADCRESULT5>>4);
Scib_xmit(ReceivedChar&0xff);
ReceivedChar=(AdcRegs.ADCRESULT6>>4);
Scib_xmit(ReceivedChar&0xff);
ReceivedChar=(AdcRegs.ADCRESULT7>>4);
Scib_xmit(ReceivedChar&0xff);
ReceivedChar=(AdcRegs.ADCRESULT8>>4);
Scib_xmit(ReceivedChar&0xff);
ReceivedChar=(AdcRegs.ADCRESULT9>>4);
Scib_xmit(ReceivedChar&0xff);
ReceivedChar=(AdcRegs.ADCRESULT10>>4);
Scib_xmit(ReceivedChar&0xff);
ReceivedChar=(AdcRegs.ADCRESULT11>>4);
Scib_xmit(ReceivedChar&0xff);
ReceivedChar=(AdcRegs.ADCRESULT12>>4);
Scib_xmit(ReceivedChar&0xff);
ReceivedChar=(AdcRegs.ADCRESULT13>>4);
Scib_xmit(ReceivedChar&0xff);
ReceivedChar=(AdcRegs.ADCRESULT14>>4);
Scib_xmit(ReceivedChar&0xff);
ReceivedChar=(AdcRegs.ADCRESULT15>>4);
Scib_xmit(ReceivedChar&0xff);
//猜想:以上用for语句
}

最后

以上就是帅气海燕最近收集整理的关于ADC的全部内容,更多相关ADC内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部