/* Configure I2S for Audio Format input */ Status Chip_I2S_RxConfig(LPC_I2S_T *pI2S, I2S_AUDIO_FORMAT_T *format) { uint32_t temp; uint16_t xDiv, yDiv; uint32_t N; if (getClkDiv(pI2S, format, &xDiv, &yDiv, &N) == ERROR) { return ERROR; } temp = pI2S->DAI & (~(I2S_DAI_WORDWIDTH_MASK | I2S_DAI_MONO | I2S_DAI_SLAVE | I2S_DAI_WS_HALFPERIOD_MASK)); if (format->WordWidth <= 8) { temp |= I2S_WORDWIDTH_8; } else if (format->WordWidth <= 16) { temp |= I2S_WORDWIDTH_16; } else { temp |= I2S_WORDWIDTH_32; } temp |= (format->ChannelNumber) == 1 ? I2S_MONO : I2S_STEREO; temp |= I2S_MASTER_MODE; temp |= I2S_DAI_WS_HALFPERIOD(format->WordWidth - 1); pI2S->DAI = temp; pI2S->RXMODE = I2S_RXMODE_CLKSEL(0); pI2S->RXBITRATE = N - 1; pI2S->RXRATE = yDiv | (xDiv << 8); return SUCCESS; }
/* Initialize the ADC peripheral and the ADC setup structure to default value */ void Chip_ADC_Init(LPC_ADC_T *pADC, ADC_CLOCK_SETUP_T *ADCSetup) { uint8_t div; uint32_t cr = 0; uint32_t clk; Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_ADC); #if defined(ADC_TRIM_SUPPORT) pADC->ADTRM = 0xF00; #endif pADC->INTEN = 0; /* Disable all interrupts */ cr |= ADC_CR_PDN; ADCSetup->adcRate = ADC_MAX_SAMPLE_RATE; ADCSetup->bitsAccuracy = 0; /* LPC17xx/40xx doesn't support this setting */ clk = 0; ADCSetup->burstMode = false; div = getClkDiv(pADC, false, ADCSetup->adcRate, clk); cr |= ADC_CR_CLKDIV(div); #if !defined(ADC_ACC_12BITS) cr |= ADC_CR_BITACC(ADCSetup->bitsAccuracy); #endif /*defined(ADC_ACC_12BITS)*/ pADC->CR = cr; }
/* Set the ADC Sample rate */ void Chip_ADC_SetSampleRate(LPC_ADC_T *pADC, ADC_CLOCK_SETUP_T *ADCSetup, uint32_t rate) { uint8_t div; uint32_t cr; cr = pADC->CR & (~ADC_SAMPLE_RATE_CONFIG_MASK); ADCSetup->adcRate = rate; div = getClkDiv(pADC, ADCSetup->burstMode, rate, (11 - ADCSetup->bitsAccuracy)); cr |= ADC_CR_CLKDIV(div); cr |= ADC_CR_BITACC(ADCSetup->bitsAccuracy); pADC->CR = cr; }
/* Initialize the ADC peripheral and the ADC setup structure to default value */ void Chip_ADC_Init(LPC_ADC_T *pADC, ADC_CLOCK_SETUP_T *ADCSetup) { uint8_t div; uint32_t cr = 0; uint32_t clk; Chip_Clock_EnableOpts(Chip_ADC_GetClockIndex(pADC), true, true, 1); pADC->INTEN = 0; /* Disable all interrupts */ cr |= ADC_CR_PDN; ADCSetup->adcRate = ADC_MAX_SAMPLE_RATE; ADCSetup->bitsAccuracy = ADC_10BITS; clk = 11; ADCSetup->burstMode = false; div = getClkDiv(pADC, false, ADCSetup->adcRate, clk); cr |= ADC_CR_CLKDIV(div); cr |= ADC_CR_BITACC(ADCSetup->bitsAccuracy); pADC->CR = cr; }
/* Initialize the ADC peripheral and the ADC setup structure to default value */ void Chip_ADC_Init(LPC_ADC_T *pADC, ADC_CLOCK_SETUP_T *ADCSetup) { uint8_t div; uint32_t cr = 0; uint32_t clk; Chip_SYSCTL_PowerUp(SYSCTL_POWERDOWN_ADC_PD); Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_ADC); pADC->INTEN = 0; /* Disable all interrupts */ cr |= ADC_CR_PDN; ADCSetup->adcRate = ADC_MAX_SAMPLE_RATE; ADCSetup->bitsAccuracy = ADC_10BITS; clk = 11; ADCSetup->burstMode = false; div = getClkDiv(pADC, false, ADCSetup->adcRate, clk); cr |= ADC_CR_CLKDIV(div); cr |= ADC_CR_BITACC(ADCSetup->bitsAccuracy); pADC->CR = cr; }