登录站点

用户名

密码

MC9S12XS128 中 ATD 的使用

2已有 2080 次阅读  2010-09-29 22:30   标签ATD  MC9S12XS128  飞思卡尔 
 
 
 
写在前面的话->:
ATD 的具体使用可参考 datasheet Chapter 10 Analog-to-Digital Converter (ADC12B16CV1) ,其中代码里头以有详细的注释,其余这里不再详述。
 
/***************************以下为代码实现****************************/
#include <hidef.h>      /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
#define uchar  unsigned char
#define uint  unsigned int
/*--------函数原型声明----------------*/
void ATD_Init(void);
void Read_AD(uint ch, uchar *ad);
void SetBusCLK_16M(void);
/*-------------主函数-----------------*/
void main(void)
{
  uchar *ad; 
  DisableInterrupts;
  SetBusCLK_16M();
 
  ATD_Init();
  DDRB = 0XFF;
  for(;;)
  {
      Read_AD(0,ad);      //读取通道0的AD值
      PORTB = *ad;          //读取的AD值通过 LED 显示出来
  }
}

 
/*---------------ATD初始化-------------*/
void ATD_Init(void)
{
   ATD0DIEN=0X00;      //禁止数字输入
   ATD0CTL1=0X00;      //不外部触发,8位分辨率
   //ATD0CTL1=0X15;  
                       //ATD控制寄存器1,写此寄存器会停止当前的转换序列(page 275)
                       //bit7  外部触发源选择, =1外部触发源使能 =0外部触发源禁止
                       //bit65   AD 分辨率选择位  00-8位精度 01-10位精度 10-12位精度  11-保留
                       //bit4    =1采样前放电  =0采样前不放电
                       //bit3210 外部触发通道选择  Page 276
   ATD0CTL2=0x40;      //禁止外部触发, 中断禁止 快速清除标志 0100 0000
                                         
                       //bit7  未生效或者保留
                       //bit6   AFFC快速清除标志位
                       //bit5   外部时钟输入停止模式位
                       //bit4   外部触发Level/Edge 控制
                       //bit3   外部触发极性选择
                       //bit2   外部触发模式使能
                       //bit1   ATD转换完成中断使能
                       //bit0   ATD比较中断使能
   ATD0CTL3=0x84;      //| DJM | S8C | S4C | S2C || S1C | FIFO | FRZ1 | FRZ0 |
                       //右对齐无符号,每次转换4个序列, No FIFO, Freeze模式下继续转
                       //bit7  转换结果对齐模式位 =0左对齐 =1右对齐
                       //bit6543  转换序列长度  就是需要转换的通道数  默认转换序列长度为4 Page 279
                      
                       //bit2     结果(FIFO  First in First out )寄存器先进先出模式位
                       //bit10    背景调试冻结使能位
                                  //00 继续转换  01 保留  10 完成当前转换,再冻结 ,11 立即冻结
   ATD0CTL4=0x01;      //采样时间为4个ATD时钟 
                       //bit7-5   采样时钟选择位(page 280)
                       //bit4-0   PRS[4:0]ATD时钟预分频位
                       //公式: ATDClock=[BusClock]/[2*(PRS+1)]  Page 280
                      
   ATD0CTL5=0;         //bit7 281页
                       //bit6 SC 特殊通道转换使能位  =0特殊通道不使能 =1特殊通道使能
                       //bit5 SCAN  =1 连续转换  =0 Signal conversion sequence
                       //bit4  多通道采样模式位 =1 多通道轮流采样  =0  单通道采样 
                       //bit3-0  模拟输入通道选择位 CD CC CB CA 0000-1111 0-16通道
}                                                                

/*---------------读取ATD的值------------------*/
void Read_AD(uint ch, uchar *ad)
{   
    ATD0CTL5|=(0X20+ch);     //禁止特殊通道,扫描模式,单通道采样
                             //通道选择 ch可为 0 1 2 3 4 5 6 7
                             //281页
    while(!ATD0STAT0_SCF);   //等待转换完成
    switch(ch)
    {         
       case 0:   *(ad+0)= ATD0DR0L;   break;  
       case 1:   *(ad+1)= ATD0DR1L;   break;
       case 2:   *(ad+2)= ATD0DR2L;   break;
       case 3:   *(ad+3)= ATD0DR3L;   break;
       case 4:   *(ad+4)= ATD0DR4L;   break;
       case 5:   *(ad+5)= ATD0DR5L;   break;
       case 6:   *(ad+6)= ATD0DR6L;   break;
       case 7:   *(ad+7)= ATD0DR7L;   break;         
    }
}
/*-----------------配置系统时钟---------------*/
void SetBusCLK_16M(void)
{  
    CLKSEL=0X00;                    //disengage PLL to system
    PLLCTL_PLLON=1;                 //turn on PLL
    SYNR=1;         
    REFDV=1;                        //pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;
    _asm(nop);                      //BUS CLOCK=16M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));      //when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;              //engage PLL to system;
}
/*-----------------end of file------------------*/

上一篇: VIVI 源码的目录结构分析 下一篇: LINUX 2.6.31 在 S3C2440 上的移植

分享 举报

发表评论 评论 (1 个评论)

涂鸦板