/**************************************************************************//** * @brief Sets up the DAC *****************************************************************************/ void setupDAC(void) { /* Configuration structure for the DAC */ DAC_Init_TypeDef dacInit = DAC_INIT_DEFAULT; /* Change the reference for Vdd */ dacInit.reference = dacRefVDD; /* Initialize DAC */ DAC_Init(DAC0, &dacInit); /* Set data for DAC channel 1 */ writeDataDAC(DAC0, 800, 1); }
/**************************************************************************//** * @brief Sets up the DAC *****************************************************************************/ void setupDAC(void) { /* Configuration structure for the DAC */ static const DAC_Init_TypeDef dacInit = { .refresh = dacRefresh8, .reference = dacRefVDD, .outMode = dacOutputPin, .convMode = dacConvModeContinuous, .prescale = 0, .lpEnable = false, .ch0ResetPre = false, .outEnablePRS = false, .sineEnable = false, .diff = false }; /* Initialize DAC */ DAC_Init(DAC0, &dacInit); /* Set data for DAC channel 0 */ writeDataDAC(DAC0, (unsigned int) DAC_DATA, DAC_CHANNEL); } /**************************************************************************//** * @brief Write DAC conversion value *****************************************************************************/ void writeDataDAC(DAC_TypeDef *dac, unsigned int value, unsigned int ch) { /* Write data output value to the correct register. */ if (!ch) { /* Write data to DAC ch 0 */ dac->CH0DATA = value; } else { /* Write data to DAC ch 1 */ dac->CH1DATA = value; } } /**************************************************************************//** * @brief Sets up the ACMP *****************************************************************************/ void setupACMP(void) { /* There is no default configuration for this */ static const ACMP_Init_TypeDef acmpInit = { .fullBias = false, .halfBias = true, .biasProg = 0xF, .interruptOnFallingEdge = false, .interruptOnRisingEdge = false, .warmTime = acmpWarmTime4, .hysteresisLevel = acmpHysteresisLevel0, .inactiveValue = false, .lowPowerReferenceEnabled = false, .vddLevel = ACMP_VDD_SCALE, .enable = false }; /* Initialize ACMPs */ ACMP_Init(ACMP0, &acmpInit); ACMP_Init(ACMP1, &acmpInit); /* Select Vdd as negative reference * Positive reference is controlled by LESENSE */ ACMP_ChannelSet(ACMP0, acmpChannelVDD, acmpChannel6); ACMP_ChannelSet(ACMP1, acmpChannelVDD, acmpChannel4); } /**************************************************************************//** * @brief Sets up the LESENSE *****************************************************************************/ void setupLESENSE(void) { static const LESENSE_Init_TypeDef initLesense = { .coreCtrl = { .scanStart = lesenseScanStartPeriodic, .prsSel = lesensePRSCh0, .scanConfSel = lesenseScanConfDirMap, .invACMP0 = false, .invACMP1 = false, .dualSample = false, .storeScanRes = false, .bufOverWr = true, .bufTrigLevel = lesenseBufTrigHalf, .wakeupOnDMA = lesenseDMAWakeUpDisable, .biasMode = lesenseBiasModeDutyCycle, .debugRun = false }, .timeCtrl = { .startDelay = 0 }, .perCtrl = { .dacCh0Data = lesenseDACIfData, .dacCh0ConvMode = lesenseDACConvModeSampleOff, .dacCh0OutMode = lesenseDACOutModeDisable, .dacCh1Data = lesenseDACIfData, .dacCh1ConvMode = lesenseDACConvModeSampleOff, .dacCh1OutMode = lesenseDACOutModePin, .dacPresc = 31, .dacRef = lesenseDACRefVdd, .acmp0Mode = lesenseACMPModeMux, .acmp1Mode = lesenseACMPModeMux, .warmupMode = lesenseWarmupModeNormal }, .decCtrl = { .decInput = lesenseDecInputSensorSt, .initState = 0, .chkState = true, .intMap = false, .hystPRS0 = false, .hystPRS1 = false, .hystPRS2 = false, .hystIRQ = false, .prsCount = true, .prsChSel0 = lesensePRSCh0, .prsChSel1 = lesensePRSCh1, .prsChSel2 = lesensePRSCh2, .prsChSel3 = lesensePRSCh3 } };