日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TLV5618 双路12位DAC 模拟SPI驱动

發布時間:2023/12/10 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TLV5618 双路12位DAC 模拟SPI驱动 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、TLV65618芯片

TLV5618A 帶掉電功能 2.7V-5.5V,低功耗雙路 12 位數模轉換器

特點 ●雙路 12 位電壓輸出 DAC ●可編程調節轉換時間 - 快速模式 3μs - 低速模式 10μs ●兼容 TMS320 和 SPI 串行接口 16位串行接口包含4位控制和12位數據。

二、驅動代碼

采用模擬SPI方式實現對TLV5618的控制。

頭文件:

/** FILE : tlv5618.h* DESCRIPTION : This file is for tlv5618.c* Author : JackWang* --------------------*/ #ifndef __tlv5618_h__ #define __tlv5618_h__#define Channal_A 1 #define Channal_B 2 #define Channal_AB 3//-------------------------- Typedef----------------------------// typedef struct {int (* initialize)(void);int (* Write_A_B)(unsigned short,unsigned short,unsigned char); }TLV5618_T;//--------------------------- Extern ---------------------------// extern TLV5618_T tlv5618;#endif //__tlv5618_h__

實現文件:

/** FILE : tlv5618.c* DESCRIPTION : This file is tlv5618 driver.* Author : JackWang*/ //--------------------------- Include ---------------------------// #include "tlv5618.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_rcc.h"//--------------------------- Define ---------------------------// #define TLV5618_CS_H GPIO_SetBits(GPIOH,GPIO_Pin_10) #define TLV5618_CS_L GPIO_ResetBits(GPIOH,GPIO_Pin_10)#define TLV5618_DIN_H GPIO_SetBits(GPIOH,GPIO_Pin_8) #define TLV5618_DIN_L GPIO_ResetBits(GPIOH,GPIO_Pin_8)#define TLV5618_CLK_H GPIO_SetBits(GPIOH,GPIO_Pin_11) #define TLV5618_CLK_L GPIO_ResetBits(GPIOH,GPIO_Pin_11)//--------------------- Function Prototype ----------------------// static int initialize(void); static int Write_A_B(unsigned short,unsigned short,unsigned char); static int EX_DAC_Conver(unsigned short);//--------------------------- Variable --------------------------// TLV5618_T tlv5618 = {.initialize = initialize,.Write_A_B=Write_A_B };/*!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!*/ static int initialize(void) {GPIO_InitTypeDef GPIO_uInitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);GPIO_uInitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_11; GPIO_uInitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_uInitStructure.GPIO_OType = GPIO_OType_PP; GPIO_uInitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_uInitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOH,&GPIO_uInitStructure);TLV5618_CS_H ;TLV5618_CLK_L ;TLV5618_DIN_L ;return 0; }/*!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!*/ static int EX_DAC_Conver(unsigned short Dignum) {unsigned short Dig = 0;TLV5618_CS_L; TLV5618_CLK_H;for (int idx = 0; idx < 16; ++idx) {Dig=Dignum&0x8000;if (Dig) { TLV5618_DIN_H; }else { TLV5618_DIN_L; }for (int delayTime = 0; delayTime < 100; ++delayTime );//for delay onlyTLV5618_CLK_L;Dignum<<=1;for (int delayTime = 0; delayTime < 100; ++delayTime );//for delay onlyTLV5618_CLK_H;}TLV5618_CLK_L;TLV5618_CS_H; for (int delayTime = 0; delayTime < 1000; ++delayTime );//for delay onlyreturn 0; } /*!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!*/ static int Write_A_B(unsigned short Data_A, unsigned short Data_B, unsigned char Channal) {unsigned short Temp=0x4000;switch(Channal){case Channal_A: EX_DAC_Conver(Temp|0x8000|(0x0fff&Data_A));break;case Channal_B: EX_DAC_Conver(Temp|0x0000|(0x0fff&Data_B));break;case Channal_AB: EX_DAC_Conver(Temp|0x1000|(0x0fff&Data_B));EX_DAC_Conver(Temp|0x8000|(0x0fff&Data_A));break;default:break;}return 0; }

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的TLV5618 双路12位DAC 模拟SPI驱动的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。