STM32之AD5410驱动

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值