高手帮我看看啊

guizilai   2008-5-30 19:09 楼主
谁来给我讲讲程序。。。2812与AD7928。。。什么意思啊。。。
/*
    //读ADC转换结果:
        AdcValueInt[0]=AdcOpr(0x8330);  //设置通道0
        AdcValueInt[0]=AdcOpr(0x8730);  //读通道0,设置通道1;
        AdcValueInt[1]=AdcOpr(0x8b30);  //读通道1,设置通道2;
        AdcValueInt[2]=AdcOpr(0x8f30);  //读通道2,设置通道3;
        AdcValueInt[3]=AdcOpr(0x9330);  //读通道3,设置通道4;
        AdcValueInt[4]=AdcOpr(0x9730);  //读通道4,设置通道5;
        AdcValueInt[5]=AdcOpr(0x9b30);  //读通道5,设置通道6;
        AdcValueInt[6]=AdcOpr(0x8330);  //读通道6,设置通道0;
ADC:AD7928
1.当CS有效时,在时钟下降沿,需要16个Clock从DIn采样数据到控制寄存器,前12个时钟有效,装载到12位寄存器(高位在前).
   寄存器的设置放映了下一次采样的设置.
2.寄存器设置详细说明:
   bit  信号       意义
   11   write     当装载时,该位位1,当该位为0时,寄存器其它11位不会改变.
   10   SEQ       设置为0
   9    NG
   8-6  ADD       通道号选择
   5,4  pM        电源管理,当设置为(11)时,速度最快.
   3    Shadow    设置为0
   2    NG
   1    Range     本应用设置为1,表示量程为:0-Vf
   0    Code      本应用设置为1,表示输出编码为无符号数(只能测正相电压)
   本应用使用单通道采集,电源模式:11.
3.转换流程(满电源模式):

   A.CS有效,写控制寄存器,选择通道;
   B.延时1uS,等待转换结束.从Dout读出转换结果,同时从Din写控制寄存器,准备下一次转换.
   C.重复B
4.Dout输出:16位数据,低12位有效.低12位/4096

*/
#include "DSP28_Device.h"

#define  SOUT GpioDataRegs.GPFDAT.bit.GPIOF0  //-o   master out
#define  SIN  GpioDataRegs.GPFDAT.bit.GPIOF1  //i    master in
#define  SCK  GpioDataRegs.GPFDAT.bit.GPIOF2  //clk
#define  SCE  GpioDataRegs.GPFDAT.bit.GPIOF3  //ce
//-----------------------------------------------------

void AdcIni(void)
{
    //初始化 片选  时钟
    SCK=1;
    SCE=1;
   
}
//-----------------------------------------------------
unsigned int  AdcOpr(unsigned int  byte)  //对ADC的操作:产生16个Clk,写控制寄存器,同时读转换结果.执行该函数的条件:SCE=1;SCK=1
                                                //函数执行后,信号的状态:SCE=1;SCK=1
                                            
                                       
{
    unsigned int   m,data_buff,DataOut;
    data_buff=byte;       
    DataOut=0;     //转换结果初始化为0
   
    SCK=1;  //空闲时时钟为高电平
    SCE=0;  //片选有效
        for(m=0;m<16;m++)
        {
            //准备好数据
        SOUT=data_buff/0x8000;
        data_buff=data_buff<<1;         
        
        //保持高电平
        NOP;
        NOP;
      
         
        SCK=0; //下降沿产生,写寄存器,同时上次转换结果出现在SIN,为了更好的配合时序,在上升沿之前读出.
        
         if(SIN)       DataOut=DataOut|0x01;   //最低位置1
        DataOut=DataOut<<1;  //注意:多移位了一次,需要在后面修正      
        
        //保持低电平
        NOP;
        NOP;
      
            SCK=1; //上升沿产生
                  
    }
    SCE=1;  //片选无效
    DataOut=(DataOut & 0x1fff)/2;
    //for(m=0;m<16;m++)  NOP;
    return DataOut;
}   

//===========================================================================
// No more.
//===========================================================================

回复评论 (1)

回复 楼主 guizilai 的帖子

不知道楼主说什么,后面不是都有注释吗,只不过是寄存器的一些地址,设置而已!
我的邮箱gaoxiaoan123@163.com!回帖是一种美德!互相帮助,共同进步! 口头禅:生活在于创造机会,把握机会!
点赞  2009-6-6 13:55
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复