56 lines
1.7 KiB
C
56 lines
1.7 KiB
C
#include "dac161s997.h"
|
||
|
||
/**
|
||
* @brief 向DAC161S997芯片写入寄存器值
|
||
*
|
||
* 该函数通过SPI接口向DAC161S997芯片写入指定的寄存器值。
|
||
*
|
||
* @param dac_num DAC芯片编号
|
||
* @param reg 要写入的寄存器地址
|
||
* @param data 要写入的数据,16位
|
||
*/
|
||
void dac161s997_write_reg(chip_type_e dac_num, uint8_t reg, uint16_t data)
|
||
{
|
||
uint8_t data_buffer[3] = {0, 0, 0};
|
||
data_buffer[0] = reg;
|
||
data_buffer[1] = data >> 8;
|
||
data_buffer[2] = data;
|
||
// board_spi_init(dac_num); // 初始化SPI,因为ADC芯片也用SPI1,但是时序不同
|
||
board_spi_cs_on(dac_num);
|
||
spi_transmit_receive(&hspi1, data_buffer, 3);
|
||
board_spi_cs_off(dac_num);
|
||
}
|
||
|
||
/**
|
||
* @brief 初始化DAC161S997 DAC设备
|
||
*/
|
||
void dac161s997_init(void)
|
||
{
|
||
dac161s997_write_reg(DAC161S997_1, DAC161S997_ERR_LOW_REG, 0xFFFF);
|
||
dac161s997_write_reg(DAC161S997_1, DAC161S997_ERR_CONFIG_REG, 0x070E);
|
||
|
||
// dac161s997_write_reg(DAC161S997_2, DAC161S997_ERR_LOW_REG, 0xFFFF);
|
||
// dac161s997_write_reg(DAC161S997_2, DAC161S997_ERR_CONFIG_REG, 0x070E);
|
||
}
|
||
|
||
/**
|
||
* @brief DAC161S997芯片输出函数
|
||
*
|
||
* 此函数用于设置DAC161S997芯片的输出电流。
|
||
*
|
||
* @param dac_num DAC芯片类型
|
||
* @param current 需要设置的电流值,单位:毫安
|
||
*/
|
||
void dac161s997_output(chip_type_e dac_num, float current)
|
||
{
|
||
uint32_t dac_code = (uint32_t)((current * 65535.0f) / 24.0f);
|
||
uint8_t data_buffer[3] = {0, 0, 0};
|
||
data_buffer[0] = DAC161S997_DACCODE_REG;
|
||
data_buffer[1] = dac_code >> 8;
|
||
data_buffer[2] = dac_code;
|
||
// board_spi_init(dac_num); // 初始化SPI,因为ADC芯片也用SPI1,但是时序不同
|
||
board_spi_cs_on(dac_num);
|
||
spi_transmit_receive(&hspi1, data_buffer, 3);
|
||
board_spi_cs_off(dac_num);
|
||
}
|