zyh_126

TMS320f28335驱动AD7606程序

0
阅读(11427)

AD7606作为双极性,单电源供电的16位采集芯片。在电力采集,继电保护中应用比较广泛,配合硬件32位浮点运算处理器TMS320f28335作为数据采集处理的应用比较广泛,现在和大家分享下驱动。采集思想:定时器0作为采样数率源,50hz采样128点采样速率是6400hz,定时器设置  

   ConfigCpuTimer(&CpuTimer0, 149.2992, 156.25);
   //ConfigCpuTimer(&CpuTimer1, 150, 1000000);
   //ConfigCpuTimer(&CpuTimer2, 150, 1000000);
   StartCpuTimer0();

每次进入定时器中断启动一次采样,中断程序:

    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断
    CpuTimer0Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志     
    CpuTimer0Regs.TCR.bit.TRB=1;  // 重载Timer0的定时数据
    ad7656_convest_start();

    启动采样后AD7606完成转化后,会产生一个外部中断给DSP,这里定为外部中断3,八通道数据读8次:

   interrupt void ISRExint3(void)
{
    PieCtrlRegs.PIEACK.all|=M_INT12 ;
      get_ad_buffer[0][which_num]=AD7656B_BASE_ADDR;
 get_ad_buffer[4][which_num]=AD7656B_BASE_ADDR;
    get_ad_buffer[1][which_num]=AD7656B_BASE_ADDR;
    get_ad_buffer[5][which_num]=AD7656B_BASE_ADDR;
 get_ad_buffer[2][which_num]=AD7656B_BASE_ADDR;
 get_ad_buffer[6][which_num]=AD7656B_BASE_ADDR;
 get_ad_buffer[3][which_num]=AD7656B_BASE_ADDR;
 get_ad_buffer[7][which_num]=AD7656B_BASE_ADDR;
 which_num++;
 if(which_num>=N) //128
 {
     which_num=0;
  complele_caiji=1;
  StopCpuTimer0();
 }
}

采集完128点后停止定时器,计算采集值