From d62b47393ed564331566ca330679e00860858c5e Mon Sep 17 00:00:00 2001 From: gorazd Date: Thu, 16 Nov 2017 20:31:34 +0100 Subject: [PATCH 1/3] lpc546xx: fix adc Resolve #5304 --- .../TARGET_NXP/TARGET_MCUXpresso_MCUS/api/analogin_api.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/api/analogin_api.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/api/analogin_api.c index 01bd11da78..f8ffe570f1 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/api/analogin_api.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/api/analogin_api.c @@ -38,6 +38,14 @@ void analogin_init(analogin_t *obj, PinName pin) uint32_t instance = obj->adc >> ADC_INSTANCE_SHIFT; adc_config_t adc_config; + uint32_t reg; + uint32_t pin_number = pin & 0x1F; + uint8_t port_number = pin / 32; + + /* Clear the PDEN_ADC0 bit in the PDRUNCFG0 */ + reg = IOCON->PIO[port_number][pin_number] & ~IOCON_PIO_DIGIMODE_MASK; + reg &= ~(1UL << SYSCON_PDRUNCFG_PDEN_ADC0_SHIFT); + IOCON->PIO[port_number][pin_number] = reg; ADC_ClockPower_Configuration(); @@ -69,6 +77,7 @@ uint16_t analogin_read_u16(analogin_t *obj) adcConvSeqConfigStruct.interruptMode = kADC_InterruptForEachSequence; ADC_SetConvSeqAConfig(adc_addrs[instance], &adcConvSeqConfigStruct); + ADC_EnableConvSeqA(adc_addrs[instance], true); ADC_DoSoftwareTriggerConvSeqA(adc_addrs[instance]); /* Wait for the converter to be done. */ From 8411134184fb61e50896321f22d3e144a35608e9 Mon Sep 17 00:00:00 2001 From: gorazd Date: Fri, 17 Nov 2017 19:16:42 +0100 Subject: [PATCH 2/3] lpc546xx: correct register name (DIGIMODE) --- targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/api/analogin_api.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/api/analogin_api.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/api/analogin_api.c index f8ffe570f1..6f9c7de502 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/api/analogin_api.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/api/analogin_api.c @@ -42,9 +42,9 @@ void analogin_init(analogin_t *obj, PinName pin) uint32_t pin_number = pin & 0x1F; uint8_t port_number = pin / 32; - /* Clear the PDEN_ADC0 bit in the PDRUNCFG0 */ + /* Clear the DIGIMODE bit */ reg = IOCON->PIO[port_number][pin_number] & ~IOCON_PIO_DIGIMODE_MASK; - reg &= ~(1UL << SYSCON_PDRUNCFG_PDEN_ADC0_SHIFT); + reg &= ~(1UL << IOCON_PIO_DIGIMODE_SHIFT); IOCON->PIO[port_number][pin_number] = reg; ADC_ClockPower_Configuration(); From 5c2f2c3cffd22fd8817c493bca56e4ca11c1b6e2 Mon Sep 17 00:00:00 2001 From: gorazd Date: Sat, 18 Nov 2017 10:44:33 +0100 Subject: [PATCH 3/3] lpc546xx: remove obsolete line --- targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/api/analogin_api.c | 1 - 1 file changed, 1 deletion(-) diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/api/analogin_api.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/api/analogin_api.c index 6f9c7de502..d958c8d2b2 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/api/analogin_api.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/api/analogin_api.c @@ -44,7 +44,6 @@ void analogin_init(analogin_t *obj, PinName pin) /* Clear the DIGIMODE bit */ reg = IOCON->PIO[port_number][pin_number] & ~IOCON_PIO_DIGIMODE_MASK; - reg &= ~(1UL << IOCON_PIO_DIGIMODE_SHIFT); IOCON->PIO[port_number][pin_number] = reg; ADC_ClockPower_Configuration();