void DAC12_SoftwareTriggerLoop(void){ int j = 0 ; while (1){ DAC_C0_REG(DAC0_BASE_PTR) |= DAC_SW_TRIG_NEXT; //SW trigger to advance to DAC0's next word buffer DAC_C0_REG(DAC1_BASE_PTR) |= DAC_SW_TRIG_NEXT; //SW trigger to advance to DAC1's next word buffer for (j=0;j<10000;j++){} // random delay } }
void DAC12_buffered (DAC_MemMapPtr dacx_base_ptr, byte WatermarkMode, byte BuffMode, byte Vreference, byte TrigMode, byte BuffInitPos,byte BuffUpLimit){ DAC_C0_REG(dacx_base_ptr) = ( DAC_BFB_PTR_INT_DISABLE | DAC_BFT_PTR_INT_DISABLE | DAC_BFWM_INT_DISABLE | DAC_HP_MODE | DAC_SW_TRIG_STOP | TrigMode | Vreference | DAC_ENABLE // DAC enalbed ); if ( Vreference == DAC_SEL_VREFO ) { VREF_Init(); }// end of if DAC_C1_REG(dacx_base_ptr) = ( DAC_BF_ENABLE | //Buffer Enabled WatermarkMode | // set 1, 2, 3,or 4 word(s) mode BuffMode // set traversal mode, normal, swing, or onetime ) ; DAC_C2_REG(dacx_base_ptr) = BuffInitPos | BuffUpLimit; }//end of DAC12_buffered
void DAC12_Vin_SWtrig(DAC_MemMapPtr dacx_base_ptr, unsigned char VrefSel) { DAC_C0_REG(dacx_base_ptr) = ( DAC_BFB_PTR_INT_DISABLE | // DACBIE =0 , buffer read pointer bottom flag interrupt is disabled DAC_BFT_PTR_INT_DISABLE | // DACTIE = 0 ,buffer read pointer top flag interrupt is disabled DAC_BFWM_INT_DISABLE | // DACWIE = 0, buffer water mark interrupt disabled DAC_HP_MODE | // LPEN = 0, low power mode DAC_SW_TRIG_STOP | // NO Software trigger yet DAC_SEL_SW_TRIG | // DACTSEL =1, Databuffer outputs to DACO pin whenever a write to DACDAT0 VrefSel | DAC_ENABLE //DAC enalbed ); if ( VrefSel == DAC_SEL_VREFO ) { VREF_Init(); }// end of if DAC_C1_REG(dacx_base_ptr)= ( DAC_BF_DISABLE | // Buffer read pointer is disabled, converted data is always the first word of buffer = DACCCDAT0 DAC_BF_NORMAL_MODE | DAC_BFWM_1WORD | DAC_DMA_DISABLE ) ; DAC_C2_REG(dacx_base_ptr) = DAC_SET_PTR_AT_BF(0)| DAC_SET_PTR_UP_LIMIT(0x0f); }// end of DAC12_Vin_SWtrig
void DACx_register_reset_por_values (DAC_MemMapPtr dacx_base_ptr){ unsigned char dacbuff_index = 0 ; for (dacbuff_index=0; dacbuff_index<16;dacbuff_index++){ SET_DACx_BUFFER( dacx_base_ptr, dacbuff_index, DACx_DAT_RESET); } DAC_SR_REG(dacx_base_ptr) = DACx_SR_RESET ; DAC_C0_REG(dacx_base_ptr) = DACx_C0_RESET ; DAC_C1_REG(dacx_base_ptr) = DACx_C1_RESET; DAC_C2_REG(dacx_base_ptr) = DACx_C2_RESET; } //end of DACx_register_reset_por_values
void DAC12_Interrupt_Init(DAC_MemMapPtr dacx_base_ptr,byte watermark, byte zerobuffer, byte uplimitbuffer ){ if (dacx_base_ptr == DAC0_BASE_PTR ) { NVICICPR2 |= (1<<17); NVICISER2 |= (1<<17); }else { NVICICPR2 |= (1<<18); NVICISER2 |= (1<<18); } DAC_C0_REG(dacx_base_ptr) |= watermark |zerobuffer | uplimitbuffer ; }
//============================================================================ //函数名称:dac_set //函数返回:无 //参数说明:dacx_base_ptr:DACx基指针 // VrefSel: 参考电压 //功能概要:配置DAC模块 //============================================================================ void dac_set(DAC_MemMapPtr dacx_base_ptr, uint8_t VrefSel) { //配置DAC_C0寄存器 DAC_C0_REG(dacx_base_ptr) = ( DAC_BFB_PTR_INT_DISABLE|//缓冲区置底中断禁止 DAC_BFT_PTR_INT_DISABLE|//缓冲区置顶中断禁止 //DAC_BFWM_INT_DISABLE |//水印中断禁止 DAC_HP_MODE |//高功耗模式 DAC_SW_TRIG_STOP |//软触发无效 DAC_SEL_SW_TRIG |//选择软件触发 VrefSel |//选择参考电压 DAC_ENABLE //使能DAC0模块 ); //配置DAC_C1寄存器 DAC_C1_REG(dacx_base_ptr)= ( DAC_BF_DISABLE |//DAC缓冲区禁止 DAC_BF_NORMAL_MODE |//DAC选择区选择正常工作模式 DAC_DMA_DISABLE //DMA禁止 ) ; }