726|0

6873

帖子

19

资源

纯净的硅(中级)

dsp28335的AD采样连续模式 [复制链接]

配置了三种模式,为单次模式,连续模式和DMA传输

单次模式是调用一次采集函数,在指定的某一个AD端口采集,用到的时候在去采样

连续模式是连续转换多个通道,采用级联模式,采用16路AD通道的值

DMA传输时AD采样的值直接通过DMA传输到内存中,不需要要CPU干预,持续采样,放到内存,需要用到数据的时候去读取相应的存储区即可。

级联顺序转换

//级联顺序转换
void Ad_Contrun_Init(void)
{
EALLOW;
       SysCtrlRegs.HISPCP.all = ADC_MODCLK;  // HSPCLK = SYSCLKOUT/ADC_MODCLK
EDIS;
InitAdc();         // For this example, init the ADC
// Specific ADC setup for this example:
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;   // Sequential mode: Sample rate   = 1/[(2+ACQ_PS)*ADC  //clock in ns]
                 // If Simultaneous mode enabled: Sample rate = 1/[(3+ACQ_PS)*ADC //clock in ns]
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;         // 1  级联模式
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1; //允许向CPU发出中断请求
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1;
AdcRegs.ADCTRL1.bit.CONT_RUN = 1;         // 连续模式
AdcRegs.ADCTRL3.bit.SMODE_SEL= 0;         // 顺序采样
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1;         // Enable Sequencer override feature
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0xF;   // 要转换的通道数
AdcRegs.ADCCHSELSEQ1.all = 0x3210;      // Initialize all ADC channel
AdcRegs.ADCCHSELSEQ2.all = 0x7654;      //每个通道对应相应的结果寄存器
AdcRegs.ADCCHSELSEQ3.all = 0xBA98;
AdcRegs.ADCCHSELSEQ4.all = 0xFEDC;

AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
DELAY_US(100);
}

//级联顺序转换,根据初始化的通道数可以改变相应要获取的结果寄存器
void Ad_Contrun_Get(Uint16 *value)
{
    value[0] = ( (AdcRegs.ADCRESULT0)>>4);
    value[1] = ( (AdcRegs.ADCRESULT1)>>4);
    value[2] = ( (AdcRegs.ADCRESULT2)>>4);
    value[3] = ( (AdcRegs.ADCRESULT3)>>4);
    value[4] = ( (AdcRegs.ADCRESULT4)>>4);
    value[5] = ( (AdcRegs.ADCRESULT5)>>4);
    value[6] = ( (AdcRegs.ADCRESULT6)>>4);
    value[7] = ( (AdcRegs.ADCRESULT7)>>4);
    value[8] = ( (AdcRegs.ADCRESULT8)>>4);
    value[9] = ( (AdcRegs.ADCRESULT9)>>4);
    value[10] = ( (AdcRegs.ADCRESULT10)>>4);
    value[11] = ( (AdcRegs.ADCRESULT11)>>4);
    value[12] = ( (AdcRegs.ADCRESULT12)>>4);
    value[13] = ( (AdcRegs.ADCRESULT13)>>4);
    value[14] = ( (AdcRegs.ADCRESULT14)>>4);
    value[15] = ( (AdcRegs.ADCRESULT15)>>4);
}


main函数中调用

Uint16 ad[16]={0};


...

...

Ad_Contrun_Init(); //AD连续顺序转换

while(1)

{

....

    Ad_Contrun_Get(ad);   // 读取AD值

....

.....

..

}




回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/7 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表