打印
[技术求助]

dsp ads1256 spi 数据写入没有反应(测DO口波形频率)

[复制链接]
4738|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
胤烨|  楼主 | 2014-1-5 13:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
spi设置
void spi_init(void)
{   
        SpiaRegs.SPICCR.all =0x000F;                    // Reset on, rising edge, 16-bit char bits
                                                                             //0x000F对应Rising Edge,0x004F对应Falling Edge  
        SpiaRegs.SPICTL.all =0x000E;                                                 // Enable master mode, normal phase,talk

    SpiaRegs.SPISTS.all=0x0000;                             // enable talk, and SPI int disabled.
       
        SpiaRegs.SPIBRR =0x000F;                                                                       

    SpiaRegs.SPICCR.all =0x008F;                         // Relinquish SPI from Reset   
    SpiaRegs.SPIPRI.bit.FREE = 1;                                        // Set so breakpoints don't disturb xmission
}

1256 函数
unsigned char SPI_SendByte(unsigned char a)
{   unsigned char b;
       
        SpiaRegs.SPISTS.bit.INT_FLAG=1;
    SpiaRegs.SPITXBUF=a&0x00FF;
    while(!SpiaRegs.SPISTS.bit.INT_FLAG);

    b=SpiaRegs.SPIRXBUF&0x00FF;

    return b;   
}
//        功    能:ADS1256 写数据,向ADS1256中地址为regaddr的寄存器写入一个字节databyte
void ADS1256WREG(unsigned char regaddr,unsigned char databyte)
{
    ADS_CS = 0;
        while(ADS_DRDY);//当ADS1256_DRDY为低时才能写寄存器
    SPI_SendByte(ADS1256_CMD_WREG|(regaddr & 0xF)); //向寄存器写入数据地址
    SPI_SendByte(0); //写入数据的个数n-1
    SPI_SendByte(databyte);  //向regaddr地址指向的寄存器写入数据databyte
        ADS_CS = 1;
}
//        功    能:读24位数据
unsigned long ADS1256ReadData(void)  
{
    unsigned char i=0;
    unsigned long sum=0;
        unsigned long r=0;
        ADS_CS = 0;

        while(ADS_DRDY);               //当ADS1256_DRDY为低时才能写寄存器
        SPI_SendByte(ADS1256_CMD_SYNC);
        SPI_SendByte(ADS1256_CMD_WAKEUP);                      
        SPI_SendByte(ADS1256_CMD_RDATA);
        //ADS_SCLK = 0;

    for(i=0;i<3;i++)
    {
            sum = sum << 8;
                r = SPI_SendByte(0);  
                  sum |= r;
        }
        ADS_CS = 1;                 
    return sum;
}
//        功    能:ADS1256 读寄存器数据,备    注: 从ADS1256中地址为regaddr的寄存器读出一个字节databyte
unsigned char ADS1256RREG(unsigned char regaddr)
{
    unsigned char r=0;
    ADS_CS = 0;

   while(ADS_DRDY);//当ADS1256_DRDY为低时才能 读寄存器
   SPI_SendByte(ADS1256_CMD_RREG|(regaddr & 0xF));//写入地址
   SPI_SendByte(0);//写入读取数据的个数n-1
   delay(10000);
   r=SPI_SendByte(0); //读出regaddr地址指向的寄存器的数据

   ADS_CS = 1;
   return r;//返回数据
}
//        功    能:ADS1256初始化子程序
void ADS1256_Init(void)
{     
        ADS_CS = 0;
    ADS_REST = 1;  //  
        //ADS1256WREG(ADS1256_STATUS,0x06);               // 高位在前、校准、使用缓冲
        //ADS1256WREG(ADS1256_MUX,0x12);                  // 初始化端口A0为‘+’,AINCOM位‘-’
        ADS1256WREG(ADS1256_ADCON,0x60);  
        delay(100);              // 放大倍数1
        ADS1256WREG(ADS1256_DRATE,ADS1256_DRATE_5SPS);  // 数据5sps
        delay(100);  
        ADS1256WREG(ADS1256_IO,0x00);                   // IO状态输入
        delay(100);
        ADS_CS = 1;

}

主函数
void main()
{  
       
       
   InitSysCtrl();

    Init_Gpio();

   DINT;
   InitPieCtrl();
   IER = 0x0000;
   IFR = 0x0000;
   InitPieVectTable();

   spi_fifo_init();
   spi_init();

   ADS1256_Init();

   delay(10000);

   EINT;   
   ERTM;


        //ADS_sum(ADS1256_MUXP_AIN0 | ADS1256_MUXN_AINCOM);
       
        //SPI_SendByte(ADS1256_CMD_SELFCAL);    //偏移和增益自动校准
        //SPI_SendByte(ADS1256_CMD_SYSOCAL);    //系统失调校准
        //SPI_SendByte(ADS1256_CMD_SYSGCAL);    //系统增益校准


    //ADS1256WREG(ADS1256_STATUS,0x06);
    //delay(10000);
    k=ADS1256RREG(ADS1256_ADCON);

   if(k==0x06)
          flag1=1;


   while(1)
   {

   }


}        

相关帖子

沙发
airwill| | 2014-1-6 09:00 | 只看该作者
没有看到说明是哪一款 DSP 芯片.
由于 SPI 一次只能传输 16 bit, 24 bit 传输必然存在连接问题, 很容易数据断开哦
用示波器先验证以下通信时序吧

使用特权

评论回复
板凳
胤烨|  楼主 | 2014-1-6 11:18 | 只看该作者
我是28335 ,还有就是怎么把精度调上去

使用特权

评论回复
地板
airwill| | 2014-1-6 17:48 | 只看该作者
本帖最后由 airwill 于 2016-6-18 14:51 编辑

除了校准以外, 本身芯片的精度是在的.
而影响精度的另外一个因素是信号源和噪声影响, 是否要在这些方面做些考虑?

其实 SPI 的通信还是比较简单的. 先对着手册比对波形图来验证通信时序

使用特权

评论回复
5
airwill| | 2014-1-6 17:48 | 只看该作者
除了校准以外, 本身芯片的精度是在的.
而影响精度的另外一个因素是信号源和噪声影响, 是否要在这些方面做些考虑?

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
胤烨 + 1 很给力!
6
walkinginr| | 2016-6-16 10:55 | 只看该作者
您好,大侠,我现在也在用ADS1256,可是搞的我一头雾水啊,想和您交流交流。我的QQ号,307442321,您的多少啊。谢谢您了。

使用特权

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

本版积分规则

1

主题

6

帖子

0

粉丝