lpc176x: Add an enable_peripheral_clock() helper function

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor
2018-11-21 20:33:44 -05:00
parent 9ba94ded9e
commit 4bbd631086
4 changed files with 23 additions and 5 deletions

View File

@@ -32,6 +32,20 @@ static LPC_GPIO_TypeDef * const digital_regs[] = {
* General Purpose Input Output (GPIO) pins
****************************************************************/
// Enable a peripheral clock
void
enable_peripheral_clock(uint32_t pclk)
{
LPC_SC->PCONP |= 1<<pclk;
if (pclk < 16) {
uint32_t shift = pclk * 2;
LPC_SC->PCLKSEL0 = (LPC_SC->PCLKSEL0 & ~(0x3<<shift)) | (0x1<<shift);
} else {
uint32_t shift = (pclk - 16) * 2;
LPC_SC->PCLKSEL1 = (LPC_SC->PCLKSEL1 & ~(0x3<<shift)) | (0x1<<shift);
}
}
// Set the mode and extended function of a pin
void
gpio_peripheral(int bank, int pin, int func, int pullup)
@@ -178,10 +192,9 @@ gpio_adc_setup(uint8_t pin)
uint32_t prescal = DIV_ROUND_UP(CONFIG_CLOCK_FREQ*4, ADC_FREQ_MAX) - 1;
uint32_t adcr = (1<<21) | ((prescal & 0xff) << 8);
if (!(LPC_SC->PCONP & (1<<12))) {
if (!(LPC_SC->PCONP & (1<<PCLK_ADC))) {
// Power up ADC
LPC_SC->PCONP |= 1<<12;
LPC_SC->PCLKSEL0 = (LPC_SC->PCLKSEL0 & ~(0x3<<24)) | (0x1<<24);
enable_peripheral_clock(PCLK_ADC);
LPC_ADC->ADCR = adcr;
}