9062|4

58

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

TMS320F28027之ADC学习笔记 [复制链接]

         学习tms320f28027已经有几个星期了,总结一些学习的经验来分享一下,之前也没写过博客,有些东西可能表达的不清楚,又因为是刚刚学习出错在所难免,现在学着试着写一下玩玩。
         首先进入正题,我个人认为学习ADC需要的手册有以下几个,最重要的是《TMS320x2802x, 2803x Piccolo Analog-to-Digital Converter (ADC) and Comparator》,寄存器的讲解和操作都在这个手册里面,无论ADC怎么配置都离不开这个手册,一切答案都在这个手册中。另一个手册是《TMS320F2802xTMS320F2802xx Piccolo System Control and Interrupts》,这里面主要用到的是ADC中断的配置。
          下面我就以一个简单的例子配置ADC单通道软件强制转换 ,配合程序来解释ADC配置的思路。
    step 1:
             InitSysCtrl();  // 系统初始化子程序,在DSP28_sysctrl.c中,PLL,关闭看门狗,使能外围模块
    step 2:
              InitPieCtrl();  //初始化PIE控制寄存器,恢复默认设置
              IER = 0x0000;//CPU禁止使能
              IFR = 0x0000;//清楚CPU所有中断标志
              InitPieVectTable();//初始化PIE向量表
    step 3:
              //初始化ADC
            EALLOW;  //使能ADC模块的时钟
            SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
             (*Device_cal)();
             EDIS;
    step 4:
            EALLOW;                            //这部分官方手册建议就按这个顺序配置
            AdcRegs.ADCCTL1.bit.ADCBGPWD  = 1;      // Power ADC BG
            AdcRegs.ADCCTL1.bit.ADCREFPWD = 1;      // Power reference
            AdcRegs.ADCCTL1.bit.ADCPWDN   = 1;      // Power ADC
            AdcRegs.ADCCTL1.bit.ADCENABLE = 1;      // Enable ADC
            AdcRegs.ADCCTL1.bit.ADCREFSEL = 0;      // Select interal BG
           EDIS;
           DELAY_US(ADC_usDELAY);         // Delay before converting ADC channels    step 5:
          EALLOW;          AdcRegs.INTSEL1N2.bit.INT1E     = 1;        //使能    ADCINT1
          //ADCSOCxCTL    x可设置0--15,CHSEL 选择AD输入通道
          AdcRegs.ADCSOC0CTL.bit.CHSEL         = 0;        //set SOC0 channel select to ADCINA0              选择AD通道
          AdcRegs.ADCSOC0CTL.bit.TRIGSEL         = 0;        //set SOC0 start trigger on software only          选择AD触发方式
          AdcRegs.ADCSOC0CTL.bit.ACQPS         = 6;        //set SOC0 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)  配置转换时间
          EDIS;
   step 6:
           // Enable ADCINT1 in PIE
          PieCtrlRegs.PIEIER1.bit.INTx1 = 1;        // Enable INT 1.1 in the PIE
          IER |= M_INT1;                                                 // Enable CPU Interrupt 1
          EINT;                                                          // Enable Global interrupt INTM
          ERTM;                                                          // Enable Global realtime interrupt DBGM

                for(;;)
                  {
                //Force start of conversion on SOC0
                AdcRegs.ADCSOCFRC1.all = 0x01;
                DELAY_US(1000000);//delay 1s   在死循环里面这样写就可以每1S就会强制ADC转换一次

                  }
         //以下是中断服务函数

interrupt void  adc_isr(void)
{
  Voltage = AdcResult.ADCRESULT0;  //读取AdcResult的值要与自己相对应配置的SOCx相对应,这个程序配置的是SOC0,所以要读取ADCRESULT0。
  vol=Voltage*3.3/4096;
  AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;                //Clear ADCINT1 flag reinitialize for next SOC
  PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;   // Acknowledge interrupt to PIE
  return;
}




最新回复

很好啦,刚学这个。感觉DSP比ARM抽象。。  详情 回复 发表于 2017-5-4 21:37
 
点赞 关注

回复
举报

6066

帖子

90

TA的资源

裸片初长成(初级)

沙发
 
谢谢分享,期待有更多更深入的内容与大家探讨
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
支持。。。。。。。。。。。。。。。
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(中级)

4
 
maylove 发表于 2015-10-26 09:18
谢谢分享,期待有更多更深入的内容与大家探讨

写的乱,写的浅,怕见笑,也没有别人写的详细
 
 
 

回复

51

帖子

2

TA的资源

一粒金砂(中级)

5
 
很好啦,刚学这个。感觉DSP比ARM抽象。。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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