打印

mcbsp配置成SPI主动模式帮忙看看

[复制链接]
6031|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
infun|  楼主 | 2011-9-30 08:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
高手帮忙看看,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
}

相关帖子

沙发
infun|  楼主 | 2011-10-4 16:40 | 只看该作者
没有人么?高手指点一下吧

使用特权

评论回复
板凳
黎明前奏| | 2011-10-4 19:56 | 只看该作者
好复杂的程序

使用特权

评论回复
地板
jfb3017| | 2012-2-8 11:08 | 只看该作者
我想问下你的AD片选信号时用帧同步信号来控制的么

使用特权

评论回复
5
kangyin4545| | 2014-7-24 13:07 | 只看该作者
SPI方式可以发送一帧多个字么,怎么发送

使用特权

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

本版积分规则

0

主题

2

帖子

1

粉丝