【原创】TLV5618芯片驱动程序
生活随笔
收集整理的這篇文章主要介紹了
【原创】TLV5618芯片驱动程序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
/** ****************************************************************************** * @file ? ?T_TLV5618.h * @author ?LuJ * @version V3.5.0 * @date ? ?2015-03-31 * @brief ? DAC頭文件管理 ****************************************************************************** * (C) Copyright Vango Technoglogy, Inc. 2015 ****************************************************************************** */ #ifndef __T_TLV5618_H #define __T_TLV5618_H ? #include "stm32f10x.h" #define TLV5618_Channal_A ? ? ? ? ? ? ?((uint8_t)0x01) ? ?//通道A #define TLV5618_Channal_B ? ? ? ? ? ? ?((uint8_t)0x02) ? ?//通道B #define TLV5618_Channal_AB ? ? ? ? ? ? ((uint8_t)0x03) ? ?//通道A&B #define TLV5618_Slow_mode ? ? ? ? ? ? ?((uint8_t)0x01) ? ?//慢速模式 #define TLV5618_Fast_mode ? ? ? ? ? ? ?((uint8_t)0x02) ? ?//快速模式 void T_TLV5618_Init(void);//初始化 void T_TLV5618_Conver(uint16_t data_A,uint16_t data_B,uint8_t Channal_x,uint8_t SpeedMode); void T_TLV5618_Test(void); ? ? ?? #endif /** ****************************************************************************** * @file ? ?T_TLV5618.c * @author ?LuJ * @version V3.5.0 * @date ? ?2015-03-31 * @brief ? TLV5618電源DAC 驅(qū)動 ****************************************************************************** * (C) Copyright Vango Technoglogy, Inc. 2015 ****************************************************************************** */ #include "stm32f10x_spi.h" #include "T_TLV5618.h" #include "V_MC74HC595.h" #include "st_lib.h" /** * 函數(shù)功能:TLV5618可調(diào)電源DAC初始化,主要初始化STM32的SPI1 * 輸入?yún)?shù):無 * 輸出參數(shù):無 * 全局變量:無 * 作者:LuJ * 修改日期:2015/03/31 * 備注:無 */ void T_TLV5618_Init(void) { SPI_InitTypeDef ?SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//SCK GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//MISO //GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//MOSI GPIO_Init(GPIOA, &GPIO_InitStructure); // Data on the DO and DIO pins are clocked out on the falling edge of CLK. SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPI_InitStructure); /* Enable SPI1 ?*/ SPI_Cmd(SPI1, ENABLE); } /** * 函數(shù)功能:TLV5618發(fā)送數(shù)據(jù),得到DAC轉(zhuǎn)換值 * 輸入?yún)?shù):data_A:DAC轉(zhuǎn)換A通道值,0x0000-0x0fff * ? ? ? ? ? data_B:DAC轉(zhuǎn)換B通道值,0x0000-0x0fff * ? ? ? ? ? Channal_x:選擇通道,TLV5618_Channal_A/TLV5618_Channal_B/TLV5618_Channal_AB * ? ? ? ? ? SpeedMode:速度模式,TLV5618_Slow_mode/TLV5618_Fast_mode * 輸出參數(shù):無 * 全局變量:修改mc74hc595_val * 作者:LuJ * 修改日期:2015/03/31 * 備注:TLV5618數(shù)據(jù)格式為R1.SPD.PWR.R0.D11-D0 */ void T_TLV5618_Conver(uint16_t data_A,uint16_t data_B,uint8_t Channal_x,uint8_t SpeedMode) { uint16_t temp; uint16_t i =0; if(SpeedMode == TLV5618_Fast_mode) { temp=0x4000; } else { temp=0x0000; } /* Loop while DR register in not emplty */ while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); T_TLV5618_SPI1_CS2(Bit_RESET);//TLV5618片選信號拉低,開始傳入16位數(shù)據(jù) /* Send byte through the SPI1 peripheral */ switch(Channal_x) { case TLV5618_Channal_A: SPI_I2S_SendData(SPI1, (temp|0x8000|(0x0fff&data_A))); ??break; case TLV5618_Channal_B: SPI_I2S_SendData(SPI1, (temp|0x0000|(0x0fff&data_B))); ??break; case TLV5618_Channal_AB: SPI_I2S_SendData(SPI1, (temp|0x1000|(0x0fff&data_B))); ??T_TLV5618_SPI1_CS2(Bit_SET);//片選信號處理,先拉高再拉低 ??T_TLV5618_SPI1_CS2(Bit_RESET); SPI_I2S_SendData(SPI1, (temp|0x8000|(0x0fff&data_A))); ??break; default: break; } while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); T_TLV5618_SPI1_CS2(Bit_SET);//片選信號處理,拉高 for(i = 500; i>0; i--); } /** * 函數(shù)功能:TLV5618可調(diào)電源DAC輸出測試 * 輸入?yún)?shù):無 * 輸出參數(shù):無 * 全局變量:無 * 作者:LuJ * 修改日期:2015/03/31 * 備注:在主函數(shù)中調(diào)用,然后使用萬用表測試Target的電源電壓為3.3V */ void T_TLV5618_Test(void) { V_74HC595_Init();//初始化移位寄存器,TLV5618的片選信號在此 T_TLV5618_Init();//初始化STM32的SPI1 T_Target_VDCIN(Bit_SET);//VDCIN=1 T_Target_V3V(Bit_RESET);//V3V=0 T_Target_MODEx(Bit_RESET,Bit_SET);//MODE0=0,MODE1=1 T_TLV5618_Conver(0x8bb,0x0000,TLV5618_Channal_A,TLV5618_Fast_mode);//A通道輸出,快速模式,電源控制位正常 T_Target_vPower_ctr(Target_SET_vPower_ctr1);//打開電源控制開關(guān) T_Target_RSTn(); while (1) { ; } }
轉(zhuǎn)載于:https://www.cnblogs.com/ljlujie/p/4445524.html
總結(jié)
以上是生活随笔為你收集整理的【原创】TLV5618芯片驱动程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac下Git与Github的简单使用
- 下一篇: BNF范式(巴科斯范式)简介