打印
[经验知识]

关于ad5324的模拟spi

[复制链接]
1359|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我最近在用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,所以看输出的数据也没错啊

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

使用特权

评论回复
5
sky_baofish|  楼主 | 2014-5-19 20:40 | 只看该作者
mmuuss586 发表于 2014-5-19 19:24
楼上正解。
示波器和芯片的PDF资料对比下时序

恩恩,版主说的很对,但是试出来结果还是不对,您能帮忙看一下麽,时序图就贴在这个帖子里了

使用特权

评论回复
6
youluo235| | 2014-5-20 19:57 | 只看该作者


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

使用特权

评论回复
7
玄德| | 2014-5-20 22:53 | 只看该作者
驱动波形貌似没问题。

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

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

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

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝