1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/OliverKung-stm32_drive_library

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
DACx0004_hSPI.c 2.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
OliverKung Отправлено 8 месяцев назад e9c5bac
#include "main.h"
#include "DACx0004_hSPI.h"
void DACx0004_Write(unsigned int* datacode)
{
DAC_nSYNC(0);
for(int i=0;i<DAISY_CHAIN_NUM;i++)
{
HAL_SPI_Transmit(&DAC_hSPI,datacode+i,4,10);
//Use LA to confirm if the send data is correct
}
DAC_nSYNC(1);
}
void DACx0004_Write_Sync(unsigned int cmd)
{
DAC_nSYNC(0);
unsigned int cmd_addr=cmd;
for(int i=0;i<DAISY_CHAIN_NUM;i++)
{
HAL_SPI_Transmit(&DAC_hSPI,&cmd_addr,4,10);
//Use LA to confirm if the send data is correct
}
DAC_nSYNC(1);
}
void DACx0004_Init()
{
DACx0004_Clear(CLEAR_MODE_MID);
if(DAISY_CHAIN_NUM!=1)
{
for(char i=0;i<DAISY_CHAIN_NUM;i++)
{
DAC_nSYNC(0);
for(char j=0;j<i;j++)
{
unsigned int nop_cmd=NO_OPERATION;
HAL_SPI_Transmit(&DAC_hSPI,&nop_cmd,4,10);
}
unsigned int daisy_chain_cmd=DAISY_CHAIN_MODE;
HAL_SPI_Transmit(&DAC_hSPI,&daisy_chain_cmd,4,10);
DAC_nSYNC(1);
}
}
}
void DACx0004_Clear(unsigned int clear_mode)
{
DACx0004_Write_Sync(CLEAR_MODE_REG||clear_mode);
}
void DACx0004_setVoltage(unsigned int* reg_value)
{
//the reg values should be like:
// DAC1_ChA,DAC2_ChA,DAC1_ChB,DAC2_ChB......
unsigned int cmdlist[4*DAISY_CHAIN_NUM]={0};
for(int i=0;i<DAISY_CHAIN_NUM;i++)
{
cmdlist[4*i]=DACx0004_setVoltage_getCMD(CHANNELA,reg_value[4*i]);
cmdlist[4*i+1]=DACx0004_setVoltage_getCMD(CHANNELB,reg_value[4*i+1]);
cmdlist[4*i+2]=DACx0004_setVoltage_getCMD(CHANNELC,reg_value[4*i+2]);
cmdlist[4*i+3]=DACx0004_setVoltage_getCMD(CHANNELD,reg_value[4*i+3]);
}
DACx0004_Write(cmdlist);
//get the cmd list fron reg value voltage list
}
void DACx0004_DAC_Update()
{
DAC_nLDAC(0);
for(char i=0;i<100;i++)
{
nop();
}
DAC_nLDAC(1);
}
unsigned int DACx0004_setVoltage_getCMD(unsigned int chan_num,unsigned int reg_value)
{
switch (chan_num)
{
case CHANNELA:
return WRITE_TO_BUFFER_N||CHANNELA_ADDR||(reg_value<<4);
break;
case CHANNELB:
return WRITE_TO_BUFFER_N||CHANNELB_ADDR||(reg_value<<4);
break;
case CHANNELC:
return WRITE_TO_BUFFER_N||CHANNELC_ADDR||(reg_value<<4);
break;
case CHANNELD:
return WRITE_TO_BUFFER_N||CHANNELD_ADDR||(reg_value<<4);
break;
default:
return WRITE_TO_BUFFER_N||CHANNEL_ALL_ADDR||(reg_value<<4);
break;
}
return 0;
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/OliverKung-stm32_drive_library.git
git@gitlife.ru:oschina-mirror/OliverKung-stm32_drive_library.git
oschina-mirror
OliverKung-stm32_drive_library
OliverKung-stm32_drive_library
master