AD9826是一款专为成像应用设计的模拟信号处理器,它采用三通道架构,设计用于对三线彩色CCD阵列的输出进行采样和调理。这款处理器集成了多个关键功能组件,包括输入箝位电路、相关双采样器(CDS)、偏移DAC和可编程增益放大器(PGA),并通过多路复用方式接入一个高性能的16位ADC。
它的SPI时序如下图所示:
一共16bit:
第1位:读写位
第2~4位:地址位
第5~7位:空
第8~16:数据位
对应的写代码实现如下:
static void Ad9826WriteReg(u8 addr,u16 dat)
{
u16 outDat = 0;
// u16 inDat = 0;
outDat = (addr<<12)|(dat&0x1FF);
SCLK_LOW();
SLOAD_HIGH(); //Disable Operation
delay_ms(1);
SCLK_LOW();
SLOAD_LOW();
delay_ms(1);
for(int i = 0; i<16; i++)
{
if (outDat&(0x01<<(15-i)))
{
SDATA_HIGH();
}
else
{
SDATA_LOW();
}
SCLK_LOW();
delay_ms(1);
SCLK_HIGH();
delay_ms(1); //Hold 10ns
}
SLOAD_HIGH();
}
对应的读代码实现如下:
static u16 fn_Ad9826ReadReg(u8 addr)
{
u16 outDat = 0;
u16 inDat = 0;
u16 dat = 0x1FF;
outDat = (addr<<12)|(dat&0x1FF)|(1<<15);
SCLK_LOW();
SLOAD_HIGH(); //Disable Operation
delay_ms(1);
SCLK_LOW();
SLOAD_LOW();
delay_ms(1);
for(int i = 0; i<16; i++)
{
if (outDat&(0x01<<(15-i)))
{
SDATA_HIGH();
}
else
{
SDATA_LOW();
}
SCLK_LOW();
delay_ms(1);
inDat = inDat << 1;
inDat = inDat | SDATA_IN();
SCLK_HIGH();
delay_ms(1); //Hold 10ns
}
SLOAD_HIGH();
dat = inDat&0x1FF;
return dat;
}