/** * \brief Initialize the DACC controller * \param pDACC Pointer to an DACC instance. * \param idDACC identifier of DAC peripheral * \param trgEn trigger mode, free running mode or external Hardware trigger * \param word transfer size,word or half word * \param trgSel hardware trigger selection * \param sleepMode sleep mode selection * \param mck value of MCK in Hz * \param refresh refresh period * \param user_sel user channel selection ,0 or 1 * \param tag_mode tag for channel number * \param startup value of the start up time (in DACCClock) (see datasheet) */ extern void DACC_Initialize( Dacc* pDACC, uint8_t idDACC, uint8_t trgEn, uint8_t trgSel, uint8_t word, uint8_t sleepMode, uint32_t mck, uint8_t refresh, /* refresh period */ uint8_t user_sel, /* user channel selection */ uint32_t tag_mode, /* using tag for channel number */ uint32_t startup ) { /* Stop warning */ mck = mck; /* Enable peripheral clock*/ PMC->PMC_PCER0 = 1 << idDACC; /* Reset the controller */ DACC_SoftReset(pDACC); /* Write to the MR register */ DACC_CfgModeReg( pDACC, ( trgEn & DACC_MR_TRGEN) | DACC_MR_TRGSEL(trgSel) | ( word & DACC_MR_WORD) | ( sleepMode & DACC_MR_SLEEP) | DACC_MR_REFRESH(refresh) | ( user_sel & DACC_MR_USER_SEL_Msk) | ( tag_mode & DACC_MR_TAG) | ( startup & DACC_MR_STARTUP_Msk)); }
/** * \brief Set DACC timings. * * \param p_dacc Pointer to a DACC instance. * \param ul_refresh Refresh period setting value. * \param ul_maxs Max speed mode configuration. * \param ul_startup Startup time selection. * * \return \ref DACC_RC_OK for OK. */ uint32_t dacc_set_timing(Dacc *p_dacc, uint32_t ul_refresh, uint32_t ul_maxs, uint32_t ul_startup) { uint32_t mr = p_dacc->DACC_MR & (~(DACC_MR_REFRESH_Msk | DACC_MR_STARTUP_Msk)); mr |= DACC_MR_REFRESH(ul_refresh); if (ul_maxs) { mr |= DACC_MR_MAXS; } else { mr &= ~DACC_MR_MAXS; } mr |= (DACC_MR_STARTUP_Msk & ((ul_startup) << DACC_MR_STARTUP_Pos)); p_dacc->DACC_MR = mr; return DACC_RC_OK; }
{ assert( 1024*refresh*1000/(mck>>1) < 20 ) ; /* Enable peripheral clock*/ PMC->PMC_PCER0 = 1 << idDACC; /* Reset the controller */ DACC_SoftReset(pDACC); /* Write to the MR register */ DACC_CfgModeReg( pDACC, ( (trgEn<<0) & DACC_MR_TRGEN) | DACC_MR_TRGSEL(trgSel) | ( (word<<4) & DACC_MR_WORD) | ( (sleepMode<<5) & DACC_MR_SLEEP) | DACC_MR_REFRESH(refresh) | ( (user_sel<<DACC_MR_USER_SEL_Pos)& DACC_MR_USER_SEL_Msk) | ( (tag_mode<<20) & DACC_MR_TAG) | ( (startup<<DACC_MR_STARTUP_Pos) & DACC_MR_STARTUP_Msk)); } /** * Set the Conversion Data * \param pDACC Pointer to an Dacc instance. * \param dwData date to be converted. */ extern void DACC_SetConversionData( Dacc* pDACC, uint32_t dwData ) { uint32_t dwMR = pDACC->DACC_MR ;