cpu/sam0_common: DAC: wait for DAC to be ready

The DAC can have some start-up delay.
If we try to write to it before it's ready, it will get stuck.

This happens now that `tests/driver_dac_dds` immediately sets a DAC
value after init.

The samd2x class of MCUs doesn't have this bit, but a quick test on
samd10 shows that it might not be nececary there - the DAC does not
get stuck when writing to it immediately after init.
This commit is contained in:
Benjamin Valentin 2020-12-13 01:13:31 +01:00
parent 9a0243e062
commit c5c46ba35b

View File

@ -128,6 +128,12 @@ int8_t dac_init(dac_t line)
DAC->CTRLA.bit.ENABLE = 1; DAC->CTRLA.bit.ENABLE = 1;
_sync(); _sync();
#ifdef DAC_STATUS_READY
/* wait for DAC startup */
const uint32_t mask = 1 << (DAC_STATUS_READY_Pos + line);
while (!(DAC->STATUS.reg & mask)) {}
#endif
return DAC_OK; return DAC_OK;
} }