首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

读取串行AD采样数据

读取串行AD采样数据

高手帮忙看看,mcbsp配置成SPI主动模式读取串行AD采样数据。谢谢

void InitMcbsp(void)
{
   EALLOW;
McbspaRegs.SPCR2.all=0x0000;  // Reset FS generator, sample rate generator & transmitter
McbspaRegs.SPCR1.all=0x0000;  // Reset Receiver, Right justify word
McbspaRegs.MFFINT.all=0x0;   // Disable all interrupts
     McbspaRegs.MFFST.all=0x0;     // Clear all status bits
     McbspaRegs.SPCR1.bit.CLKSTP=2;     
     McbspaRegs.PCR.bit.CLKXP=0;    //发送数据在上升沿
     McbspaRegs.PCR.bit.CLKRP=0;    //接收数据在下降沿
     McbspaRegs.PCR.bit.CLKXM=1;   //CLKX设置为输出,SPI工作在主动模式
     delay_loop();
     McbspaRegs.PCR.bit.SCLKME=0;   
    McbspaRegs.SRGR2.bit.CLKSM=1;  //选择采样速率发生器输入时钟源
     McbspaRegs.SRGR1.bit.CLKGDV=0x03;     
     McbspaRegs.PCR.bit.FSXM=1;       //FSX为输出引脚
     McbspaRegs.SRGR2.bit.FSGM=0;//采样速率器帧同步信号驱动发送帧同步信号
     McbspaRegs.PCR.bit.FSXP=1;      //FSX低电平有效
     
    McbspaRegs.XCR2.bit.XDATDLY=1;  //发送一位延时
     McbspaRegs.RCR2.bit.RDATDLY=1;  //接收一位延时
     
    McbspaRegs.XCR2.bit.XPHASE=0;  //发送使用单相位帧
     McbspaRegs.RCR2.bit.RPHASE=0;  //接收使用单相位帧
     
    McbspaRegs.XCR1.bit.XFRLEN1=0; //发送帧长度为一个串行字
     McbspaRegs.RCR1.bit.RWDLEN1=0; //接收帧长度为一个串行字
     
    McbspaRegs.XCR1.bit.XWDLEN1=2; //发送字长度为16位
     McbspaRegs.RCR1.bit.RWDLEN1=2; //接收字长度为16位      
                 
    McbspaRegs.SPCR2.bit.GRST=1;   //复位采样速率生成器
     clkg_delay_loop();                  // Wait at least 2 CLKG cycles
McbspaRegs.SPCR2.bit.XRST=1;        // Release TX from Reset
McbspaRegs.SPCR1.bit.RRST=1;        // Release RX from Reset
clkg_delay_loop();                  // Wait at least 2 CLKG cycles
McbspaRegs.SPCR2.bit.FRST=1;        // Frame Sync Generator reset

}

void InitAdc(void)
{
   InitMcbsp();
   
while(McbspaRegs.SPCR2.bit.XRDY!=1);
McbspaRegs.DXR1.all=0xA000;
while(McbspaRegs.SPCR1.bit.RRDY!=1);
Adcresult[0]=McbspaRegs.DRR1.all;

while(McbspaRegs.SPCR2.bit.XRDY!=1);
McbspaRegs.DXR1.all=0xC000;;
while(McbspaRegs.SPCR1.bit.RRDY!=1);
Adcresult[0]=McbspaRegs.DRR1.all;

while(McbspaRegs.SPCR2.bit.XRDY!=1);
McbspaRegs.DXR1.all=0x9C18;;
while(McbspaRegs.SPCR1.bit.RRDY!=1);
Adcresult[0]=McbspaRegs.DRR1.all;

}


void delay_loop(void)     // Delay function used while initializing the registers
{
     long      i;
     for (i = 0; i<4; i++);
}
void clkg_delay_loop(void)
{
     long      i;
     for (i = 0; i<16; i++); //delay in McBsp init. must be at least 2 SRG cycles
}
返回列表