您好,欢迎来到61ic! | [登录] [注册] 忘记密码 | 设为首页 帮助
 . 网站首页 . 业界新闻 . 设计中心 . 移动技术 . TI专栏 . ADI专栏 . FPGA专栏 . 代码工厂 . 官方商城 . 
 . 活动专区 . 新品快递 . 解决方案 . 前沿科技 . TI资源 . ADI资源 . FPGA资源 . 下载中心 . 产品展示 . 
加入收藏
付款方式
联系我们
您现在的位置: 61IC电子在线 >> TI专栏 >> TI C2000 >> 28x 定点系列 >> 正文
  [组图]中文原创DSP笔记:TMS320CF2812 DSP ADC转换应用程序入门           ★★★ 【字体:
中文原创DSP笔记:TMS320CF2812 DSP ADC转换应用程序入门
作者:Ken YE    文章来源:Ken YE    点击数:    更新时间:2012-9-23    

   

           TMS320CF2812 ADC模块具有16路12位流水线模数转换模块(ADC).TMS320CF2812 DSP内部就有ADC转换资源。包含前段模拟多路复用器(MUX)采样保持S/H电路、转换内核、稳压器以及其他模拟支持电路。
数字电路包含可编程序列发生器、结果寄存器、模拟电路接口、器件外围总线接口已经其他片上模块的接口。模数转换
(ADC)模块可以直接用于电机或运动控制场合。
软件:软件立即启动(使用SOC的SEQn位)。
EVA:事件管理器A(在EVA中有多个事件源)。
EVB:事件管理器B(在EVB中有多个事件源)。
排序器可工作在启动/停止模式,允许多个按时间排序的触发源使转换同步。
EVA和EVB可分别独立地触发SEQ1和SEQ2(仅用在双排序器模式)。
外部:(ADC SOC)引脚。
模拟输入:0V―3V

 

        初始化TMS320CF2812 DSP的ADC模块,以及转换程序。并且对所有模拟输入通道进行转换,转换的结果可以在RESULTSn寄存器中获得。使用的用户可以访问该寄存器。ADC以16状态排序器来实现操作,一旦排序到达EOS(序列的结束)时,转换结束,ADC转换程序实现如下:

//
//文件   Example_281xAdcSOC.c
//
//DSP2812 ADC 应用程序
//本学习应用程序,中断是要被使能,并且EVA设置SEQ1为产生一个周期的ADC SOC信号。
//
//变量:
//Voltage1[10]      最后的10次ADCRESULT0 值
//Voltage2[10]      最后的10次ADCRESULT1 值
//conversioncount   当前的转换结果计数次数0-9  
//loopcount         空闲循环计数器
#include 〝DSP281x_Device.h 〞        //DSP281x headerfile
include file
#include 〝DSP281x_examples.h 〞        //DSP281x examples
include file

//程序中函数类型声明
interrupt vold adc_isr(void);

//本程序全局中变量:
uint16 loopcount;
uint16 conversioncount;
uint16 voltagel1[10];
uint16 voltagel2[10];

main()
{
//第一步:初始化系统控制PLL,watchDog,使能外设时钟
//本程序中的初始化系统控制函数可以在DSP281x_sysctrl.c找到
initsysctrl();

//对于本程序,设置HSPCLK为SYSCLKOUT/6(假设SYSCLKOUT为150Mhz,HSPCLK为25Mhz)
EALLOW;

//第二步:初始化GPIO
//该程序函数可以在DSP281x_piectrl.c文件中找到
initGpio();//本程序不需要这一步

//第三步清除所有中断,并初始化PIE向量表
//禁止CPU中断
 DINT;

//初始化PIE控制寄存器到默认状态,所有PIE中断的默认状态为禁止,并且标志位被清除
//该程序函数可以在DSP281x_piectrl.c文件中找到
  initipiectrl();

//禁止CPU中断,清除所有CPU中断标志
  IER ﹦ 0X0000;
  IER ﹦ 0X0000;
-
//使用指向外部中断服务程序(ISR)的指针初始化PIE向量表
//这将对所有表单元进行操作,即使本程序不使用的中断。这对于调试是很有用的
//外部中断服务程序(ISR)可以在DSP281x_defaultisr.c文件中找到
  initipiectrl();

//在本程序使用的中断被重新影射到文件中的ISR函数
  EALLOW;                        //在写EALLOW保护寄存器,该语句是必须的
  pievecttable.ADCINT = &adc_isr;
  EDIS;                          //当禁止写EALLOW保护寄存器,该语句是必须的

//第四步:初始化元件的外设
//下面的函数可以在DSP281x_initperipherals.c文件中找到
//initperipherals();            //本程序是不必需要的
  initadc();                    //本程序是要初始化ADC

//第五步:用户代码,使能中断


//使能PIE中的ADCINT
  piectrlregs.PIEIER1.bit.INTx6 = 1;
  IER ︳﹦M_INT1;               //使能CPU中断1
  EINT;                         //使能全局中断INTM
  ERTM;                         //使能全局实时中断DBGM

Loopcount = 0;
conversioncount = 0;

//配置ADC
  Adcregs.ADCMAXCONV.all = 0x0001;       // 在设置SEQ1设置2个转换
  Adcregs.ADCCHSELSEQ1.bit.CONV00 = 0x3; // 设置ADCINA3作为第一次SEQ1转换
  Adcregs.ADCCHSELSEQ1.bit.CONV01 = 0x2; // 设置ADCINA2作为第二次SEQ1转换
  Adcregs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1;  // 设置EVASOC,从而开始SEQ1
  Adcregs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;  // 设置SEQ1中断,(每一个EOS)

//配置EVA
//假如EVA时钟已经在initsysctrl()被使能
  Evaregs.T1CMPR = 0x0080;                // 设置T1比较值   
  Evaregs.T1PR = 0xFFFF;                  // 设置周期寄存器
  Evaregs.T1CON.all = 0x1042;             // 使能定时器1比较(向上计数模式)

//等待ADC中断
  while(1)
  ﹛
    loopcount++;
   ﹜

interrupt void adc_isr(void)

  voltage1[conversioncount] = adcregs.ADCRSULT0 ﹥﹥4;
  voltage2[conversioncount] = adcregs.ADCRSULT1 ﹥﹥4;

//如果已经记录40次转换,则需要重新开始
if(conversioncount == 9)

  conversioncount = 0;

else conversioncount++;

//重新初始化下一个ADC序列
adcregs.ADCTRL2.bit.RST_SEQ1 = 0;        //复位SEQ1
adcregs.ADCST.bit.INT_SEQ1_CLR = 1;      //清除INT SEQ1 位
piectrlregs.PIEACK.all = PIEACK_GROUP1;   //应答PIE的中断

return;

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    TI C2000 DSP烧录仿真器‘捉…
    TI 的eXpressDSP是什么?
    基于TMS320F2812生成空间向量…
    TMS320F2812在井下微弱瓦斯信…
    基于TMS320F2812的汽车内部噪…
    TMS320F2812 DSP在柴油发电机…
    基于TMS320F2812的变频调压功…
    一种基于TMS320F2812智能接口…
    TLC5620I与TMS320F2812接口设…
    TMS320F2812实现谐波谱线显示…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号