/* ===================================================================*/ LDD_TDeviceData* DacLdd1_Init(LDD_TUserData *UserDataPtr) { DacLdd1_TDeviceData *DeviceDataPtr; /* LDD device structure */ /* Allocate HAL device structure */ /* {Default RTOS Adapter} Driver memory allocation: Dynamic allocation is simulated by a pointer to the static object */ DeviceDataPtr = &DeviceDataPtr__DEFAULT_RTOS_ALLOC; DeviceDataPtr->DmaTransferDeviceDataPtr = NULL; /* DMA is not used */ DeviceDataPtr->UserDataPtr = UserDataPtr; /* Store the RTOS device structure */ /* SIM_SCGC6: DAC0=1 */ SIM_SCGC6 |= SIM_SCGC6_DAC0_MASK; DAC_PDD_EnableDevice(DAC0_BASE_PTR,PDD_DISABLE); /* Disable device */ /* Initialization of pin routing */ /* PORTE_PCR30: ISF=0,MUX=0 */ PORTE_PCR30 &= (uint32_t)~(uint32_t)((PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x07))); /* DAC0_DAT0H: ??=0,??=0,??=0,??=0,DATA1=0 */ DAC0_DAT0H = DAC_DATH_DATA1(0x00); /* DAC0_DAT0L: DATA0=0 */ DAC0_DAT0L = DAC_DATL_DATA0(0x00); /* DAC0_C2: ??=0,??=0,??=0,DACBFRP=0,??=1,??=1,??=1,DACBFUP=1 */ DAC0_C2 = (DAC_C2_DACBFUP_MASK | 0x0EU); /* DAC0_C1: DMAEN=0,??=0,??=0,??=0,??=0,DACBFMD=0,??=0,DACBFEN=0 */ DAC0_C1 = 0x00U; /* DAC0_SR: ??=0,??=0,??=0,??=0,??=0,??=0,DACBFRPTF=0,DACBFRPBF=0 */ DAC0_SR = 0x00U; /* DAC0_C0: DACEN=1,DACRFS=0,DACTRGSEL=0,DACSWTRG=0,LPEN=0,??=0,DACBTIEN=0,DACBBIEN=0 */ DAC0_C0 = DAC_C0_DACEN_MASK; /* Registration of the device structure */ PE_LDD_RegisterDeviceStructure(PE_LDD_COMPONENT_DacLdd1_ID,DeviceDataPtr); return ((LDD_TDeviceData*)DeviceDataPtr); /* Return pointer to the data data structure */ }
PORTE->PCR[DAC_POS] |= PORT_PCR_MUX(0); // Select analog // Disable buffer mode DAC0->C1 = 0; DAC0->C2 = 0; // Enable DAC, select VDDA as reference voltage DAC0->C0 = MASK(DAC_C0_DACEN_SHIFT) | MASK(DAC_C0_DACRFS_SHIFT); } /* Code for driving DAC */ void Play_Sound_Sample(uint16_t val) { DAC0->DAT[0].DATH = DAC_DATH_DATA1(val >> 8); DAC0->DAT[0].DATL = DAC_DATL_DATA0(val); } void SineTable_Init(void) { unsigned n; for (n=0; n<NUM_STEPS; n++) { SineTable[n] = (MAX_DAC_CODE/2)*(1+sinf(n*(2*3.1415927/NUM_STEPS))); } } void Init_Waveform(void) { uint32_t i; for (i=0; i<NUM_WAVEFORM_SAMPLES; i++) { Waveform[i] = (MAX_DAC_CODE/2)*