| } else { | } else { | ||||
| DAC0_C0 = DAC_C0_DACEN | DAC_C0_DACRFS; // 3.3V VDDA is DACREF_2 | DAC0_C0 = DAC_C0_DACEN | DAC_C0_DACRFS; // 3.3V VDDA is DACREF_2 | ||||
| } | } | ||||
| if (val < 0) val = 0; // TODO: saturate instruction? | |||||
| else if (val > 4095) val = 4095; | |||||
| __asm__ ("usat %[value], #12, %[value]\n\t" : [value] "+r" (val)); | |||||
| *(volatile aliased_int16_t *)&(DAC0_DAT0L) = val; | *(volatile aliased_int16_t *)&(DAC0_DAT0L) = val; | ||||
| #elif defined(__MKL26Z64__) | #elif defined(__MKL26Z64__) | ||||
| // use whatever voltage is on the AREF pin | // use whatever voltage is on the AREF pin | ||||
| DAC0_C0 = DAC_C0_DACEN | DAC_C0_DACSWTRG; // 3.3V VDDA | DAC0_C0 = DAC_C0_DACEN | DAC_C0_DACSWTRG; // 3.3V VDDA | ||||
| } | } | ||||
| if (val < 0) val = 0; | |||||
| else if (val > 4095) val = 4095; | |||||
| __asm__ ("usat %[value], #12, %[value]\n\t" : [value] "+r" (val)); | |||||
| *(volatile aliased_int16_t *)&(DAC0_DAT0L) = val; | *(volatile aliased_int16_t *)&(DAC0_DAT0L) = val; | ||||
| #endif | #endif | ||||
| } else { | } else { | ||||
| DAC1_C0 = DAC_C0_DACEN | DAC_C0_DACRFS; // 3.3V VDDA is DACREF_2 | DAC1_C0 = DAC_C0_DACEN | DAC_C0_DACRFS; // 3.3V VDDA is DACREF_2 | ||||
| } | } | ||||
| if (val < 0) val = 0; // TODO: saturate instruction? | |||||
| else if (val > 4095) val = 4095; | |||||
| __asm__ ("usat %[value], #12, %[value]\n\t" : [value] "+r" (val)); | |||||
| *(volatile aliased_int16_t *)&(DAC1_DAT0L) = val; | *(volatile aliased_int16_t *)&(DAC1_DAT0L) = val; | ||||
| } | } |