#ifndef DAC_H__ #define DAC_H__ #include "stdint.h" // 定义采样率对应的定时器周期 // 定时器频率是90Mhz时 #define RATE11025 8163 #define RATE22050 4081 #define RATE44100 2041 #define RATE48000 1875 // 这个是整数 // dac 最大音量等级 #define DAC_VOL_MAX 10 // 定义使用的定时器 #define DAC_TIMER TIM4 #define DAC_TIMER_RCC RCC_APB1Periph_TIM4 typedef struct _DAC_UserStruct { uint32_t *buff1; // buff的高16位声道1,低16位声道2 uint32_t *buff2; int buff_size; int buff_useing; // 当前正在使用哪个buff int buff_Invalid; // 1,有空闲buff,0,无空闲buff int rate; // 采样率对应的定时器周期 void (*call_back)(struct _DAC_UserStruct *u); } DAC_UserStruct; // 以双缓冲方式初始化,返回0成功 int DAC_NormalInit(DAC_UserStruct *dac); void DAC_NormalDeInit(DAC_UserStruct *dac); // 获取DAC句柄 DAC_UserStruct *DAC_GetDacHander(void); // 根据采样率求得定时器频率 uint16_t DAC_GetRate(uint16_t rate); // 填充缓冲区,返回0成功,-1,失败 int DAC_FillBuff(int16_t *buf, int size, int nch); // 以fifo方式初始化,返回0成功 int DAC_FifolInit(void); void DAC_FifoDeInit(void); // 设置获取数据函数 int DAC_SetSetValuwFun(int (*fun)(uint16_t *)); // 保存数据,返回0成功 int DAC_SaveValue(uint16_t value); #endif