AD9826 spi读写源码贡献

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

古月小静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值