Beispiel #1
0
void DAC_SetBufferReadPointer(DAC_Type *base, uint8_t index)
{
    assert(index < DAC_DATL_COUNT);

    uint8_t tmp8 = base->C2 & ~DAC_C2_DACBFRP_MASK;

    tmp8 |= DAC_C2_DACBFRP(index);
    base->C2 = tmp8;
}
/***********************************************************************************************
 功能:DAC初始化
 形参:DAC_InitStruct: DAC初始化结构
 返回:0
 详解:0
************************************************************************************************/
void DAC_Init(DAC_InitTypeDef* DAC_InitStruct)
{
	//参数检查
	assert_param(IS_DAC_TRIGGER_MODE(DAC_InitStruct->DAC_TrigerMode));
	assert_param(IS_DAC_BUFFER_MODE(DAC_InitStruct->DAC_BufferMode));
	assert_param(IS_DAC_WATERMARK_MODE(DAC_InitStruct->DAC_WaterMarkMode));
	
	//开启DAC模块时钟
	SIM->SCGC2|=SIM_SCGC2_DAC0_MASK;  
	//配置BUFFER模式
	switch(DAC_InitStruct->DAC_BufferMode)
	{
		case DAC_TRIGER_MODE_NONE:
			DAC0->C0 &= ~DAC_C0_DACTRGSEL_MASK;
			DAC0->C0 |= DAC_C0_DACSWTRG_MASK;
			break;
		case DAC_TRIGER_MODE_SOFTWARE:
			DAC0->C0 |= DAC_C0_DACTRGSEL_MASK;
			DAC0->C0 |= DAC_C0_DACSWTRG_MASK;
			break;
		case DAC_TRIGER_MODE_HARDWARE:
			DAC0->C0 &= ~DAC_C0_DACTRGSEL_MASK;
			DAC0->C0 &= ~DAC_C0_DACSWTRG_MASK;
			break;
		default:break;
	}
	//选择参考源2
	DAC0->C0 |= DAC_C0_DACRFS_MASK;  
	//开启DAC模块
	DAC0->C0 |= DAC_C0_DACEN_MASK ;
	
	//配置DAC_C1寄存器 配置BUFFER模式
	switch(DAC_InitStruct->DAC_BufferMode)
	{
		case BUFFER_MODE_NORMAL:
			DAC0->C1 |= DAC_C1_DACBFEN_MASK;
			DAC0->C1 |= DAC_C1_DACBFMD(0);
			break;
		case BUFFER_MODE_SWING:
			DAC0->C1 |= DAC_C1_DACBFEN_MASK;
			DAC0->C1 |= DAC_C1_DACBFMD(1);  
			break;
		case BUFFER_MODE_ONETIMESCAN:
			DAC0->C1 |= DAC_C1_DACBFEN_MASK;
			DAC0->C1 |= DAC_C1_DACBFMD(2);
			break;
		case BUFFER_MODE_DISABLE:
			DAC0->C1 &= ~DAC_C1_DACBFEN_MASK;
			break;
	}
	//设置水位
	switch(DAC_InitStruct->DAC_WaterMarkMode)
	{
		case WATER_MODE_1WORD:
			DAC0->C1 |= DAC_C1_DACBFWM(0);
			break;
		case WATER_MODE_2WORD:
			DAC0->C1 |= DAC_C1_DACBFWM(1);
			break;
		case WATER_MODE_3WORD:
			DAC0->C1 |= DAC_C1_DACBFWM(2);
			break;
		case WATER_MODE_4WORD:
			DAC0->C1 |= DAC_C1_DACBFWM(3);
			break;
		default:break;
	}

  //配置C2寄存器 设置上限和下线
	DAC0->C2 =  DAC_C2_DACBFUP(DAC_InitStruct->DAC_BufferUpperLimit);
	DAC0->C2 |= DAC_C2_DACBFRP(DAC_InitStruct->DAC_BufferStartPostion);
}
Beispiel #3
0
/**
 * @brief  设置DAC模块buffer的指针
 *
 * @param  instance     :模块号
 *         @arg HW_DAC0 :芯片的DAC0 模块
 *         @arg HW_DAC1 :芯片的DAC1 模块
 * @param  value        :指针位置 0-15
 * @retval None
 */
void DAC_SetBufferReadPointer(uint32_t instance, uint32_t value)
{
    DAC_InstanceTable[instance]->C2 &= ~DAC_C2_DACBFRP_MASK;
    DAC_InstanceTable[instance]->C2 |= DAC_C2_DACBFRP(value);
}