[经验知识] 关于ad5324的模拟spi

[复制链接]
1629|6
 楼主| sky_baofish 发表于 2014-5-19 17:02 | 显示全部楼层 |阅读模式
我最近在用ad5324这块芯片,mcu是msp430F149,用它本身的spi或是利用io口的模拟spi,但是总是无法得到输出,各位大神能看一下这个输出有啥问题么?

#include <msp430x14x.h>

#define SCLK_H P1OUT |= BIT2
#define SCLK_L P1OUT &=~BIT2
#define SCL_H P1OUT |= BIT1
#define SCL_L P1OUT &= ~BIT1
#define SDA_H P1OUT |= BIT0
#define SDA_L P1OUT &= ~BIT0


typedef unsigned char uchar;
/*******************************************
函数名称:Set_IO_ASPI
功    能:设置ASPI对应IO为输出方向并AD不接收
参    数:无
返回值  :无
********************************************/
void Set_IO_ASPI(void)
{
    P1DIR |=BIT0 + BIT1 + BIT2;
    SCL_H;
}
/*******************************************
函数名称:delay
功    能:延时约15us的时间(8M主频)
参    数:无
返回值  :无
********************************************/
void delay(void)
{
    char i;
   
    for(i = 0;i < 2;i++)
        _NOP();
}       
/*******************************************
函数名称:start
功    能:完成ASPI的起始条件操作
参    数:无
返回值  :无
********************************************/
void start(void)
{
    SCL_H;
    SCL_L;
    _NOP();
//    delay();
}
/*******************************************
函数名称:stop
功    能:完成ASPI的终止条件操作
参    数:无
返回值  :无
********************************************/
void stop(void)
{
    SCL_H;
    _NOP();
//    delay();          
}

/*******************************************
函数名称:write1
功    能:向APSI总线发送一个1
参    数:无
返回值  :无
********************************************/
void write1(void)
{
    SDA_H;
//    delay();
    SCLK_H;
//    delay();
    SCLK_L;                               
//    delay();
}
/*******************************************
函数名称:write0
功    能:向ASPI总线发送一个0
参    数:无
返回值  :无
********************************************/
void write0(void)
{
    SDA_L;
//    delay();
    SCLK_H;
//    delay();                         
    SCLK_L;                               
//    delay();
}
/*******************************************
函数名称:write1byte
功    能:向ASPI总线发送一个字节的数据
参    数:wdata--发送的数据
返回值  :无
********************************************/
void write1byte(uchar wdata)
{
    uchar i;

    for(i = 8;i > 0;i--)
    {
        if(wdata & 0x80)        write1();
        else                         write0();
        wdata <<= 1;
    }                    
}


/*******************************************
函数名称:Write_DAC_ASPI
功    能:向DAC中写入输出电压数据
参    数:写入的高字节和低字节
返回值  :无
********************************************/
void Write_DAC_ASPI(uchar dataH,uchar dataL)
{
    start();
    write1byte(dataH);  
    write1byte(dataL);   
    stop();  
}
youluo235 发表于 2014-5-19 18:17 | 显示全部楼层
最好的办法是楼主用示波器看信号线和时钟线的时序是不是和PDF一致,大多的SPI出现问题都是在时序还有就是延时上面,祝好运。
mmuuss586 发表于 2014-5-19 19:24 | 显示全部楼层
楼上正解。
示波器和芯片的PDF资料对比下时序
 楼主| sky_baofish 发表于 2014-5-19 20:39 | 显示全部楼层
youluo235 发表于 2014-5-19 18:17
最好的办法是楼主用示波器看信号线和时钟线的时序是不是和PDF一致,大多的SPI出现问题都是在时序还有就是延 ...


逻辑分析的时序,分别是使能端,时钟端和数据端

要求的时序,感觉输出也没有延时问题呐

要求*pd位和*ldac位为1,所以看输出的数据也没错啊

求大神帮看看,还是没有输出

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| sky_baofish 发表于 2014-5-19 20:40 | 显示全部楼层
mmuuss586 发表于 2014-5-19 19:24
楼上正解。
示波器和芯片的PDF资料对比下时序

恩恩,版主说的很对,但是试出来结果还是不对,您能帮忙看一下麽,时序图就贴在这个帖子里了
youluo235 发表于 2014-5-20 19:57 | 显示全部楼层


在仔细看看这意思,仔细品读

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
玄德 发表于 2014-5-20 22:53 | 显示全部楼层
驱动波形貌似没问题。

看图上,两次设定的输出值差别很大,又这么快?你用万用表测?
保持输出值,不要变,搞准一个点,再说。

如果不是上面问题,
最好把t1到t8这些时延,认真核对一下,

再就可能现场问题,哪里错了,你还不知道。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部