ATSAM3X8-单通道ADC采样
1.寄存器方式
static void configure_dual_dac(void)
{pmc_enable_periph_clk(ID_DACC);DACC->DACC_CR = DACC_CR_SWRST;DACC->DACC_MR = 0| DACC_MR_TRGEN_DIS | DACC_MR_USER_SEL_CHANNEL0 | DACC_MR_REFRESH(1) | DACC_MR_STARTUP_0; DACC->DACC_ACR = DACC_ACR_IBCTLCH0(0x02) | DACC_ACR_IBCTLCH1(0x02);DACC->DACC_CHER = DACC_CHER_CH0 | DACC_CHER_CH1;}
static void dac_output(uint32_t channel, uint16_t value)
{if (value > 4095) value = 4095;while ((DACC->DACC_ISR & DACC_ISR_TXRDY) == 0);uint32_t mr = DACC->DACC_MR;mr &= ~DACC_MR_USER_SEL_Msk; if (channel==0)mr |= DACC_MR_USER_SEL_CHANNEL0; else mr |= DACC_MR_USER_SEL_CHANNEL1; DACC->DACC_MR = mr;DACC->DACC_CDR = value;}
2.ASF3方式
static void configure_dual_dac(void)
{pmc_enable_periph_clk(ID_DACC);dacc_set_transfer_mode(DACC, 0); dacc_set_power_save(DACC, 0, 0); uint32_t analog_control = DACC_ACR_IBCTLCH0(0x02) | DACC_ACR_IBCTLCH1(0x02);dacc_set_analog_control(DACC, analog_control);dacc_enable_channel(DACC, 0); dacc_enable_channel(DACC, 1); }
static void dac_output(uint32_t channel, uint16_t value)
{if (value > 4095) value = 4095;while ((DACC->DACC_ISR & DACC_ISR_TXRDY) == 0);uint32_t mr = DACC->DACC_MR;mr &= ~DACC_MR_USER_SEL_Msk; if (channel==0)mr |= DACC_MR_USER_SEL_CHANNEL0; else mr |= DACC_MR_USER_SEL_CHANNEL1; DACC->DACC_MR = mr;DACC->DACC_CDR = value;}