/** * @brief Main routine for SSP example * @return Nothing */ int main(void) { SystemCoreClockUpdate(); Board_Init(); /* SSP initialization */ Board_SSP_Init(LPC_SSP); Chip_SSP_Init(LPC_SSP); ssp_format.frameFormat = SSP_FRAMEFORMAT_SPI; ssp_format.bits = SSP_DATA_BITS; ssp_format.clockMode = SSP_CLOCK_MODE0; Chip_SSP_SetFormat(LPC_SSP, ssp_format.bits, ssp_format.frameFormat, ssp_format.clockMode); Chip_SSP_Enable(LPC_SSP); /* Initialize GPDMA controller */ Chip_GPDMA_Init(LPC_GPDMA); /* Setting GPDMA interrupt */ NVIC_DisableIRQ(DMA_IRQn); NVIC_SetPriority(DMA_IRQn, ((0x01 << 3) | 0x01)); NVIC_EnableIRQ(DMA_IRQn); /* Setting SSP interrupt */ NVIC_EnableIRQ(SSP_IRQ); appSSPMainMenu(); /* DeInitialize SSP peripheral */ Chip_SSP_DeInit(LPC_SSP); return 0; }
/* Initializes the SDC card controller */ void Chip_SDC_Init(LPC_SDC_T *pSDC) { uint32_t i = 0; Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SDC); Chip_SYSCTL_PeriphReset(SYSCTL_RESET_PCSDC); /* Initialize GPDMA controller */ Chip_GPDMA_Init(LPC_GPDMA); /* Initialize SDC peripheral */ SDC_Init(pSDC); /* Power-up SDC Peripheral */ Chip_SDC_PowerControl(pSDC, SDC_POWER_UP, 0); /* delays for the supply output is stable*/ for ( i = 0; i < 0x80000; i++ ) {} Chip_SDC_SetClock(pSDC, SDC_IDENT_CLOCK_RATE); Chip_SDC_ClockControl(pSDC, SDC_CLOCK_ENABLE, ENABLE); /* Power-on SDC Interface */ Chip_SDC_PowerControl(pSDC, SDC_POWER_ON, 0); }
/* Initialize DMA for UART, enable DMA controller and enable DMA interrupt */ static void App_DMA_Init(void) { /* Initialize GPDMA controller */ Chip_GPDMA_Init(LPC_GPDMA); /* Setting GPDMA interrupt */ NVIC_DisableIRQ(DMA_IRQn); NVIC_SetPriority(DMA_IRQn, ((0x01 << 3) | 0x01)); NVIC_EnableIRQ(DMA_IRQn); }
/* DMA routine for ADC example */ static void App_DMA_Test(void) { uint16_t dataADC; /* Initialize GPDMA controller */ Chip_GPDMA_Init(LPC_GPDMA); /* Setting GPDMA interrupt */ NVIC_DisableIRQ(DMA_IRQn); NVIC_SetPriority(DMA_IRQn, ((0x01 << 3) | 0x01)); NVIC_EnableIRQ(DMA_IRQn); /* Setting ADC interrupt, ADC Interrupt must be disable in DMA mode */ NVIC_DisableIRQ(_LPC_ADC_IRQ); Chip_ADC_Int_SetChannelCmd(_LPC_ADC_ID, _ADC_CHANNLE, ENABLE); /* Get the free channel for DMA transfer */ dmaChannelNum = Chip_GPDMA_GetFreeChannel(LPC_GPDMA, _GPDMA_CONN_ADC); /* Enable burst mode if any, the AD converter does repeated conversions at the rate selected by the CLKS field in burst mode automatically */ if (Burst_Mode_Flag) { Chip_ADC_SetBurstCmd(_LPC_ADC_ID, ENABLE); } /* Get adc value until get 'x' character */ while (DEBUGIN() != 'x') { /* Start A/D conversion if not using burst mode */ if (!Burst_Mode_Flag) { Chip_ADC_SetStartMode(_LPC_ADC_ID, ADC_START_NOW, ADC_TRIGGERMODE_RISING); } channelTC = 0; Chip_GPDMA_Transfer(LPC_GPDMA, dmaChannelNum, _GPDMA_CONN_ADC, (uint32_t) &DMAbuffer, GPDMA_TRANSFERTYPE_P2M_CONTROLLER_DMA, 1); /* Waiting for reading ADC value completed */ while (channelTC == 0) {} /* Get the ADC value fron Data register*/ dataADC = ADC_DR_RESULT(DMAbuffer); App_print_ADC_value(dataADC); } /* Disable interrupts, release DMA channel */ Chip_GPDMA_Stop(LPC_GPDMA, dmaChannelNum); NVIC_DisableIRQ(DMA_IRQn); /* Disable burst mode if any */ if (Burst_Mode_Flag) { Chip_ADC_SetBurstCmd(_LPC_ADC_ID, DISABLE); } }
void Board_DAC_Init(void) { Chip_SCU_DAC_Analog_Config(); Chip_DAC_Init(LPC_DAC); Chip_DAC_SetBias(LPC_DAC, DAC_MAX_UPDATE_RATE_400kHz); Chip_DAC_ConfigDAConverterControl(LPC_DAC, DAC_CNT_ENA | DAC_DMA_ENA); // Enable DMA Chip_DAC_SetDMATimeOut(LPC_DAC, 0xffff); Chip_GPDMA_Init(LPC_GPDMA); NVIC_DisableIRQ(DMA_IRQn); NVIC_SetPriority(DMA_IRQn, ((0x01 << 3) | 0x01)); NVIC_EnableIRQ(DMA_IRQn); dacInfo.flagCyclic=0; dacInfo.dmaChannelDAC=0xFF; }
/* DMA routine for DAC example */ static void App_DMA_Test(void) { uint32_t tmp = 0; volatile uint32_t i = 0; /* Initialize GPDMA controller */ Chip_GPDMA_Init(LPC_GPDMA); /* Setting GPDMA interrupt */ NVIC_DisableIRQ(DMA_IRQn); NVIC_SetPriority(DMA_IRQn, ((0x01 << 3) | 0x01)); NVIC_EnableIRQ(DMA_IRQn); /* Get the free channel for DMA transfer */ dmaChannelNum = Chip_DMA_GetFreeChannel(LPC_GPDMA, GPDMA_CONN_DAC); /* Output DAC value until get 'x' character */ while (DEBUGIN() != 'x') { /* Start D/A conversion */ tmp++; if (tmp == (DATA_SIZE - 1)) { tmp = 0; } /* pre-format the data to DACR register */ DMAbuffer = (uint32_t) (DAC_VALUE(tmp) | DAC_BIAS_EN); for (i = 0; i < 0x10000; i++) ; channelTC = 0; Chip_DMA_Transfer(LPC_GPDMA, dmaChannelNum, (uint32_t) &DMAbuffer, GPDMA_CONN_DAC, GPDMA_TRANSFERTYPE_M2P_CONTROLLER_DMA, 1); /* Waiting for writing DAC value completed */ while (channelTC == 0) {} } /* Disable interrupts, release DMA channel */ Chip_DMA_Stop(LPC_GPDMA, dmaChannelNum); NVIC_DisableIRQ(DMA_IRQn); }