更新dac161p997

This commit is contained in:
许晟昊 2024-12-24 13:10:28 +08:00
parent 5401ebeb61
commit 82feca4263
2 changed files with 21 additions and 27 deletions

View File

@ -1,8 +1,14 @@
#include "dac161p997.h" #include "dac161p997.h"
#include "delay.h" #include "tims.h"
static dac161p997_t _handle; static dac161p997_t _handle;
static void delay_us(uint32_t us)
{
RESET_TIM_COUNT(TIME_1US);
while (LL_TIM_GetCounter(TIME_1US) < us)
; // 等待计数器达到指定值
}
static void dac161p997_output_0() static void dac161p997_output_0()
{ {
_handle.io->set(*_handle.io); _handle.io->set(*_handle.io);
@ -124,17 +130,8 @@ void dac161p997_swif_write_reg(uint16_t data, uint8_t tag)
*/ */
void dac161p997_output_current(float32 current) void dac161p997_output_current(float32 current)
{ {
uint8_t adc = (uint16_t)(current * DAC161P997_CURRENT_SLOPE) >> 8; uint16_t adc = (uint16_t)(current * DAC161P997_CURRENT_SLOPE);
static uint8_t last_adc; dac161p997_swif_write_reg(adc, DACCODE_WRITE);
if (adc == last_adc)
{
last_adc = adc;
return;
}
dac161p997_swif_write_reg(DAC161P997_LCK_REG_UNLOCK, CONFIG_WRITE);
dac161p997_swif_write_reg(DAC161P997_ERR_LOW_REG + adc, CONFIG_WRITE);
dac161p997_swif_write_reg(DAC161P997_LCK_REG_LOCK, CONFIG_WRITE);
} }
/** /**
@ -149,13 +146,9 @@ void dac161p997_output_current(float32 current)
*/ */
void dac161p997_init() void dac161p997_init()
{ {
ENABLE_TIM_COUNT(TIME_1US);
_handle.io = gpio_create(DAC161P997_IO_PORT, DAC161P997_IO_PIN); _handle.io = gpio_create(DAC161P997_IO_PORT, DAC161P997_IO_PIN);
dac161p997_swif_write_reg(DAC161P997_LCK_REG_UNLOCK, CONFIG_WRITE); dac161p997_swif_write_reg(DAC161P997_LCK_REG + DAC161P997_LCK_REG_UNLOCK, CONFIG_WRITE);
dac161p997_swif_write_reg(DAC161P997_CONFIG2_REG + dac161p997_swif_write_reg(DAC161P997_CONFIG2_REG, CONFIG_WRITE);
DAC161P997_CONFIG2_REG_LOOP + dac161p997_swif_write_reg(DAC161P997_LCK_REG + DAC161P997_LCK_REG_LOCK, CONFIG_WRITE);
DAC161P997_CONFIG2_REG_CHANNEL +
DAC161P997_CONFIG2_REG_PARITY +
DAC161P997_CONFIG2_REG_FRAME,
CONFIG_WRITE);
dac161p997_swif_write_reg(DAC161P997_LCK_REG_LOCK, CONFIG_WRITE);
} }

View File

@ -2,7 +2,7 @@
#define __DAC161P997_H__ #define __DAC161P997_H__
#include "main.h" #include "main.h"
#include "gpios.h" #include "gpios.h"
#define TIME_1US TIM1
#define DAC161P997_IO_PORT (DAC161P997_GPIO_Port) #define DAC161P997_IO_PORT (DAC161P997_GPIO_Port)
#define DAC161P997_IO_PIN (DAC161P997_Pin) #define DAC161P997_IO_PIN (DAC161P997_Pin)
@ -60,15 +60,15 @@
#define DACCODE_20mA (0xD555) #define DACCODE_20mA (0xD555)
#define DACCODE_24mA (0xFFFF) #define DACCODE_24mA (0xFFFF)
// cycles typedef enum
// #define QUARTER_CYCLES (625) {
// #define HALF_CYCLES (1250) DAC161P997_IDLE_SYM,
// #define THREE_CYCLES (1875)
// #define FULL_CYCLES (2500)
} dac161p997_e;
typedef struct typedef struct
{ {
gpio_t *io; gpio_t *io;
uint8_t count;
} dac161p997_t; } dac161p997_t;
void dac161p997_output_0(void); void dac161p997_output_0(void);
@ -76,6 +76,7 @@ void dac161p997_output_1(void);
void dac161p997_output_d(void); void dac161p997_output_d(void);
void dac161p997_output_symbol(uint8_t sym); void dac161p997_output_symbol(uint8_t sym);
void dac161p997_swif_write_reg(uint16_t data, uint8_t tag); void dac161p997_swif_write_reg(uint16_t data, uint8_t tag);
extern void dac161p997_output_current(float32 current); extern void dac161p997_output_current(float32 current);
extern void dac161p997_init(void); extern void dac161p997_init(void);
#endif #endif