ISA板使用一个端口寄存器连接了LTC1448,使用软件模拟SPI时序写入数据
#include
void SoftwareSimSPIWrite(const ULONGLONG uLLdata, //数据
const char bitsWidth, //数据宽度
bool bLeftAlign, //左对齐?
bool bMSBFirst //高位先发?
)
{
#define CSActive 0 //CS有效电平
#define ClkActive 1 //Clk有效电平
#define DataActive 1 //Data有效电平
#define wPortAddress 660 //端口地址
#define WriteDACPortBit(cs, clk, din) /*写端口宏*/
do
{
BYTE byteData = 0;/*构造数据*/
byteData |= (BYTE)(((cs)? CSActive: (!CSActive)) << 0); /*CS 在bit0*/
byteData |= (BYTE)(((clk)? ClkActive: (!ClkActive)) << 1); /*clk 在bit1*/
byteData |= (BYTE)(((din)? DataActive: (!DataActive)) << 2); /*din 在bit2*/
_outp(wPortAddress, byteData);/*写入端口*/
}while(0);
//位移掩码初始处理
ULONGLONG ullMask = 0;
if(bMSBFirst)
{
if(bLeftAlign)
ullMask = 0x8000000000000000ui64;
else
ullMask = 1ui64 << (bitsWidth-1);
}
else
{
if(bLeftAlign)
ullMask = 1ui64 << (64 - bitsWidth);
else
ullMask = 1ui64;
}
WriteDACPortBit(0, 0, 0); //置CS CLK DATA无效
WriteDACPortBit(1, 0, 0); //置CS有效 CLK DATA无效
for(int i=0; i>= 1) : (ullMask <<= 1); //位移掩码
}
WriteDACPortBit(1, 0, 0); //置CS有效 CLK DATA无效
WriteDACPortBit(0, 0, 0); //置CS CLK DATA无效
}
void WriteLTC1448(const WORD dataA, const WORD dataB)
{
DWORD dwData = ((dataA & 0xFFFUL) << 12) | (dataB & 0xFFFUL);
SoftwareSimSPIWrite(dwData, 24, false, true);
}