56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #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
 |