我最近在用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();
} |