diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/lp_analogin_api.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/lp_analogin_api.c index be610f79a4..b5971a1e51 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/lp_analogin_api.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/lp_analogin_api.c @@ -77,9 +77,15 @@ void analogin_init(analogin_t *obj, PinName pin) pinmap_pinout(pin, PinMap_ADC); + /* Need to ensure the pin is in input mode */ + gpio_init(&gpio, pin); + gpio_dir(&gpio, PIN_INPUT); + reg = IOCON->PIO[port_number][pin_number]; - /* Clear the DIGIMODE bit */ - reg &= ~IOCON_PIO_DIGIMODE_MASK; + + /* Clear the MODE & DIGIMODE bit */ + reg &= ~(IOCON_PIO_DIGIMODE_MASK | IOCON_PIO_MODE_MASK); + /* For pins PIO0_9, PIO0_11, PIO0_12, PIO0_15, PIO0_18, PIO0_31, PIO1_0 and PIO1_9, leave ASW bit at '0' in the related IOCON register. */ if (((port_number == 0) && ((pin_number == 9) || (pin_number == 11) || (pin_number == 12) || @@ -91,11 +97,8 @@ void analogin_init(analogin_t *obj, PinName pin) /* Enable Analog Switch Input control */ reg |= IOCON_PIO_ASW_MASK; } - IOCON->PIO[port_number][pin_number] = reg; - /* Need to ensure the pin is in input mode */ - gpio_init(&gpio, pin); - gpio_dir(&gpio, PIN_INPUT); + IOCON->PIO[port_number][pin_number] = reg; } uint16_t analogin_read_u16(analogin_t *obj) @@ -110,16 +113,30 @@ uint16_t analogin_read_u16(analogin_t *obj) memset(&mLpadcCommandConfigStruct, 0, sizeof(mLpadcCommandConfigStruct)); memset(&mLpadcResultConfigStruct, 0, sizeof(mLpadcResultConfigStruct)); +#if (defined(FSL_FEATURE_LPADC_FIFO_COUNT) && (FSL_FEATURE_LPADC_FIFO_COUNT == 2)) + LPADC_DoResetFIFO0(adc_addrs[instance]); + LPADC_DoResetFIFO1(adc_addrs[instance]); +#else + LPADC_DoResetFIFO(adc_addrs[instance]); +#endif /* FSL_FEATURE_LPADC_FIFO_COUNT */ + /* Set conversion CMD configuration. */ LPADC_GetDefaultConvCommandConfig(&mLpadcCommandConfigStruct); + + /* Check if we should use the B channel */ + if (obj->adc >> ADC_B_CHANNEL_SHIFT) { + mLpadcCommandConfigStruct.sampleChannelMode = kLPADC_SampleChannelSingleEndSideB; + } + mLpadcCommandConfigStruct.channelNumber = channel; + mLpadcCommandConfigStruct.conversionResoultuionMode = kLPADC_ConversionResolutionStandard; LPADC_SetConvCommandConfig(adc_addrs[instance], LPADC_USER_CMDID, &mLpadcCommandConfigStruct); /* Set trigger configuration. */ LPADC_GetDefaultConvTriggerConfig(&mLpadcTriggerConfigStruct); mLpadcTriggerConfigStruct.targetCommandId = LPADC_USER_CMDID; mLpadcTriggerConfigStruct.enableHardwareTrigger = false; - LPADC_SetConvTriggerConfig(adc_addrs[instance], 0U, &mLpadcTriggerConfigStruct); /* Configurate the trigger0. */ + LPADC_SetConvTriggerConfig(adc_addrs[instance], 0U, &mLpadcTriggerConfigStruct); /* Configure the trigger0. */ LPADC_DoSoftwareTrigger(adc_addrs[instance], 1U); /* 1U is trigger0 mask. */ @@ -131,13 +148,13 @@ uint16_t analogin_read_u16(analogin_t *obj) } #endif /* FSL_FEATURE_LPADC_FIFO_COUNT */ - return ((mLpadcResultConfigStruct.convValue) >> 3U); + return (mLpadcResultConfigStruct.convValue << 1); } float analogin_read(analogin_t *obj) { uint16_t value = analogin_read_u16(obj); - return (float)value * (1.0f / (float)0xFFFF); + return (float)value * (1.0f / (float)0xFFF0); } const PinMap *analogin_pinmap() diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC55S69/TARGET_LPCXpresso/PeripheralNames.h b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC55S69/TARGET_LPCXpresso/PeripheralNames.h index 5a7fff1298..60cbec6794 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC55S69/TARGET_LPCXpresso/PeripheralNames.h +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC55S69/TARGET_LPCXpresso/PeripheralNames.h @@ -81,22 +81,38 @@ typedef enum { #define ADC_B_CHANNEL_SHIFT 5 typedef enum { - ADC0_SE0 = 0, - ADC0_SE1 = 1, - ADC0_SE2 = 2, - ADC0_SE3 = 3, - ADC0_SE4 = 4, - ADC0_SE5 = 5, - ADC0_SE6 = 6, - ADC0_SE7 = 7, - ADC0_SE8 = 8, - ADC0_SE9 = 9, - ADC0_SE10 = 10, - ADC0_SE11 = 11, - ADC0_SE12 = 12, - ADC0_SE13 = 13, - ADC0_SE14 = 14, - ADC0_SE15 = 15 + ADC0_SE0 = 0, + ADC0_SE1 = 1, + ADC0_SE2 = 2, + ADC0_SE3 = 3, + ADC0_SE4 = 4, + ADC0_SE5 = 5, + ADC0_SE6 = 6, + ADC0_SE7 = 7, + ADC0_SE8 = 8, + ADC0_SE9 = 9, + ADC0_SE10 = 10, + ADC0_SE11 = 11, + ADC0_SE12 = 12, + ADC0_SE13 = 13, + ADC0_SE14 = 14, + ADC0_SE15 = 15, + ADC0_SE0_B = (1 << ADC_B_CHANNEL_SHIFT) | 0, + ADC0_SE1_B = (1 << ADC_B_CHANNEL_SHIFT) | 1, + ADC0_SE2_B = (1 << ADC_B_CHANNEL_SHIFT) | 2, + ADC0_SE3_B = (1 << ADC_B_CHANNEL_SHIFT) | 3, + ADC0_SE4_B = (1 << ADC_B_CHANNEL_SHIFT) | 4, + ADC0_SE5_B = (1 << ADC_B_CHANNEL_SHIFT) | 5, + ADC0_SE6_B = (1 << ADC_B_CHANNEL_SHIFT) | 6, + ADC0_SE7_B = (1 << ADC_B_CHANNEL_SHIFT) | 7, + ADC0_SE8_B = (1 << ADC_B_CHANNEL_SHIFT) | 8, + ADC0_SE9_B = (1 << ADC_B_CHANNEL_SHIFT) | 9, + ADC0_SE10_B = (1 << ADC_B_CHANNEL_SHIFT) | 10, + ADC0_SE11_B = (1 << ADC_B_CHANNEL_SHIFT) | 11, + ADC0_SE12_B = (1 << ADC_B_CHANNEL_SHIFT) | 12, + ADC0_SE13_B = (1 << ADC_B_CHANNEL_SHIFT) | 13, + ADC0_SE14_B = (1 << ADC_B_CHANNEL_SHIFT) | 14, + ADC0_SE15_B = (1 << ADC_B_CHANNEL_SHIFT) | 15 } ADCName; typedef enum { diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC55S69/TARGET_LPCXpresso/PeripheralPins.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC55S69/TARGET_LPCXpresso/PeripheralPins.c index f49cdb6f26..d3cbc2e0d4 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC55S69/TARGET_LPCXpresso/PeripheralPins.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC55S69/TARGET_LPCXpresso/PeripheralPins.c @@ -23,15 +23,14 @@ const PinMap PinMap_RTC[] = { /************ADC***************/ const PinMap PinMap_ADC[] = { - {P0_23, ADC0_SE0, 0}, - {P0_10, ADC0_SE1, 0}, - {P0_31, ADC0_SE3, 0}, - {P1_8, ADC0_SE4, 0}, - {P2_0, ADC0_SE5, 0}, - {P2_13, ADC0_SE6, 0}, - {P2_11, ADC0_SE7, 0}, - {P0_16, ADC0_SE8, 0}, - {NC , NC , 0} + {P0_23, ADC0_SE0, 0}, + {P0_10, ADC0_SE1, 0}, + {P0_31, ADC0_SE3, 0}, + {P1_8, ADC0_SE4, 0}, + {P2_0, ADC0_SE5, 0}, + {P2_13, ADC0_SE6, 0}, + {P2_11, ADC0_SE7, 0}, + {NC , NC , 0} }; /************CAN***************/ diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC55S69/TARGET_LPCXpresso/mbed_overrides.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC55S69/TARGET_LPCXpresso/mbed_overrides.c index 003959fee0..0f21a68f54 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC55S69/TARGET_LPCXpresso/mbed_overrides.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC55S69/TARGET_LPCXpresso/mbed_overrides.c @@ -54,6 +54,7 @@ void ADC_ClockPower_Configuration(void) /* Disable LDOGPADC power down */ POWER_DisablePD(kPDRUNCFG_PD_LDOGPADC); + RESET_PeripheralReset(kADC0_RST_SHIFT_RSTn); } void sdio_clock_setup(void)