第一、初始化及配置
#define AD5422_PORT GPIOC
#define AD5422_SCLK GPIO_Pin_6
#define AD5422_LATCH GPIO_Pin_7
#define AD5422_SDIN GPIO_Pin_8
#define AD5422_SCLK_H AD5422_PORT->BSRR = AD5422_SCLK
#define AD5422_SCLK_L AD5422_PORT->BRR = AD5422_SCLK
#define AD5422_LATCH_H AD5422_PORT->BSRR = AD5422_LATCH
#define AD5422_LATCH_L AD5422_PORT->BRR = AD5422_LATCH
#define AD5422_SDIN_H AD5422_PORT->BSRR = AD5422_SDIN
#define AD5422_SDIN_L AD5422_PORT->BRR = AD5422_SDIN
GPIO_InitStructure.GPIO_Pin = AD5422_LATCH | AD5422_SCLK | AD5422_SDIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(AD5422_PORT, &GPIO_InitStructure);
AD5422_4Ma_20Ma_Mode();
void AD5422_Write(u8 count, u8 *buf)
{
u8 val = 0;
u8 i = 0, j = 0;
AD5422_LATCH_L;
Delay_Us(20);
for(i = count; i > 0; i--)
{
val = *(buf+i-1);
for (j=0; j<8; j++)
{
Delay_Us(20);
AD5422_SCLK_L;
if(0x80 == (val & 0x80))
AD5422_SDIN_H;
else
AD5422_SDIN_L;
Delay_Us(20);
AD5422_SCLK_H;
val <<= 1;
}
}
AD5422_SCLK_L;
Delay_Us(5);
AD5422_LATCH_H;
Delay_Us(20);
}
void AD5422_4Ma_20Ma_Mode(void)
{
u8 buf[3];
buf[2] = 0x55;
buf[1] = 0x10;
buf[0] = 0x05;
AD5422_Write(3,buf);
}
第二、输出电流
void AD5422_Out_Current(u16 cur)
{
u8 buf[3];
u16 temp = (cur-4)*4096;
buf[2] = 0x01;
buf[1] = temp >> 8;
buf[0] = temp;
AD5422_Write(3,buf);
}