AD5410是一款ADI的DAC,驱动如下:
/******************************************************************************
* 文 件 名 称:BspAD5410.c
* 文件功能概述:实现AD5410的接口
* 文 件 作 者:
* 版 本:V1.0.0.0
* 修 订 记 录:2017-6-30创建
******************************************************************************/
/***************************相关配置*******************************************
该驱动对应于AD5410的菊花链模式
******************************************************************************/
#include "BspAD5410.h"
#define AD5410xDelayUs(x) DelayUs(x)
#define USE_DAISY_CHAIN 1
/*
* 数据类型-AD5410端口信息
*/
typedef struct AD5410CtrlStruc
{
E_SPIx AD5410xSPIx;
S_GpioCtrl AD5410xLATCH;
}S_AD5410Ctrl;
/*
* 用于记录AD5410的端口信息
*/
static S_AD5410Ctrl stAD5410Ctrl[E_AD5410_Max] =
{
/* AD5410_1 */
{
E_SPI_2,
{RCC_AHB1Periph_GPIOG,GPIOG,GPIO_Pin_6} //LATCH
},
/* AD5410_2 */
{
E_SPI_2,
{RCC_AHB1Periph_GPIOG,GPIOG,GPIO_Pin_6} //LATCH
}
};
/*
* 拉高5410的LATCH端口
*/
static __inline void AD5410_LATCH_HIGH(E_AD5410 eAD5410)
{
GPIOxWriteBit(stAD5410Ctrl[eAD5410].AD5410xLATCH.GPIOx, stAD5410Ctrl[eAD5410].AD5410xLATCH.GPIOxPinx , 1);
}
/*
* 拉低5410的LATCH端口
*/
static __inline void AD5410_LATCH_LOW(E_AD5410 eAD5410)
{
GPIOxWriteBit(stAD5410Ctrl[eAD5410].AD5410xLATCH.GPIOx, stAD5410Ctrl[eAD5410].AD5410xLATCH.GPIOxPinx , 0);
}
/*
*SPI总线上挂接的设备类型不一样,每次使用前均需对总线进行初始化
*/
static void AD5410InitSPIModule(E_AD5410 eAD5410)
{
SPI_InitTypeDef SPIxInitStruct;
/* Initialize the SPI_Direction member */
SPIxInitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
/* initialize the SPI_Mode member */
SPIxInitStruct.SPI_Mode = SPI_Mode_Master;
/* initialize the SPI_DataSize member */
SPIxInitStruct.SPI_DataSize = SPI_DataSize_8b;
/* Initialize the SPI_CPOL member */
SPIxInitStruct.SPI_CPOL = SPI_CPOL_Low;
/* Initialize the SPI_CPHA member */
SPIxInitStruct.SPI_CPHA = SPI_CPHA_1Edge;
/* Initialize the SPI_NSS member */
SPIxInitStruct.SPI_NSS = SPI_NSS_Soft;
/* Initialize the SPI_FirstBit member */
SPIxInitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
/* Initialize the SPI_CRCPolynomial member */
SPIxInitStruct.SPI_CRCPolynomial = 7;
SPIxUpdateModule(stAD5410Ctrl[eAD5410].AD5410xSPIx,&SPIxInitStruct);
}
/*******************************************************************************
* 函 数 名:static sint8 AD5410xEnableOperate(void)
* 参 数:
* 返 回:0
* 创 建 人:
* 创建时间:2017-6-30
* 详 述:在LATCH信号线产生一个下降沿
* 修改记录:2017-6-30创建
*******************************************************************************/
static sint8 AD5410xEnableOperate(E_AD5410 eAD5410)
{
//拉高LATCH
AD5410_LATCH_HIGH(eAD5410);
AD5410xDelayUs(10);
//拉低LATCH
AD5410_LATCH_LOW(eAD5410);
return 0;
}
/*******************************************************************************
* 函 数 名:static sint8 AD5410xDisableOperate(void)
* 参 数:void
* 返 回:0
* 创 建 人:
* 创建时间:2017-6-30
* 详 述:在LATCH信号线产生一个上升沿,该信号线的上升沿会锁存数据
* 修改记录:2017-6-30创建
*******************************************************************************/
static sint8 AD5410xDisableOperate(E_AD5410 eAD5410)
{
//拉低LATCH
AD5410_LATCH_LOW(eAD5410);
AD5410xDelayUs(10);
//拉高LATCH