打印

SPI主动模式

[复制链接]
2011|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
spark周|  楼主 | 2012-1-23 09:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
}

相关帖子

沙发
spark周|  楼主 | 2012-1-23 09:44 | 只看该作者
不知问题出在哪

使用特权

评论回复
板凳
爱之翼V| | 2012-1-30 16:34 | 只看该作者
帮楼主顶一下,等待高手出现

使用特权

评论回复
地板
gaga1| | 2012-2-5 16:14 | 只看该作者
楼主要表明什么呢,能否具体说下呀

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

821

主题

10121

帖子

4

粉丝