diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/objects.h b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/objects.h index 2eb11fa8e2..f71ba17944 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/objects.h +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/objects.h @@ -58,6 +58,7 @@ struct i2c_s { struct spi_s { uint32_t instance; uint8_t bits; + uint8_t ssel_num; }; #if DEVICE_FLASH && !defined(TARGET_FLASH_CMSIS_ALGO) diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/pinmap.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/pinmap.c index a822d0ac20..a0100daf69 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/pinmap.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/pinmap.c @@ -33,7 +33,7 @@ void pin_function(PinName pin, int function) IOCON->PIO[port_number][pin_number] |= IOCON_PIO_DIGIMODE_MASK; reg = IOCON->PIO[port_number][pin_number]; - reg = (reg & ~0x7) | (function & IOCON_PIO_FUNC_MASK); + reg = (reg & ~IOCON_PIO_FUNC_MASK) | (function & IOCON_PIO_FUNC_MASK); IOCON->PIO[port_number][pin_number] = reg; } diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/spi_api.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/spi_api.c index 80984b5eae..e2054f6fec 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/spi_api.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/spi_api.c @@ -42,6 +42,7 @@ void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel obj->instance = pinmap_merge(spi_data, spi_cntl); MBED_ASSERT((int)obj->instance != NC); + obj->ssel_num = 0; switch (obj->instance) { case 0: @@ -96,6 +97,7 @@ void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel pinmap_pinout(sclk, PinMap_SPI_SCLK); if (ssel != NC) { pinmap_pinout(ssel, PinMap_SPI_SSEL); + obj->ssel_num = pinmap_function(ssel, PinMap_SPI_SSEL) >> SSELNUM_SHIFT; } } @@ -128,6 +130,7 @@ void spi_format(spi_t *obj, int bits, int mode, int slave) master_config.polarity = (mode & 0x2) ? kSPI_ClockPolarityActiveLow : kSPI_ClockPolarityActiveHigh; master_config.phase = (mode & 0x1) ? kSPI_ClockPhaseSecondEdge : kSPI_ClockPhaseFirstEdge; master_config.direction = kSPI_MsbFirst; + master_config.sselNum = obj->ssel_num; if (baud_rate > 0) { master_config.baudRate_Bps = baud_rate; } diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC54114/TARGET_LPCXpresso/PeripheralNames.h b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC54114/TARGET_LPCXpresso/PeripheralNames.h index b1fb1ce339..c92261c088 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC54114/TARGET_LPCXpresso/PeripheralNames.h +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC54114/TARGET_LPCXpresso/PeripheralNames.h @@ -94,7 +94,7 @@ typedef enum { ADC0_SE11 = 11, } ADCName; - +#define SSELNUM_SHIFT 16 typedef enum { SPI_0 = Flexcomm3, SPI_1 = Flexcomm5 diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC54114/TARGET_LPCXpresso/PeripheralPins.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC54114/TARGET_LPCXpresso/PeripheralPins.c index dc222f2af9..b07d90f9ea 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC54114/TARGET_LPCXpresso/PeripheralPins.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC54114/TARGET_LPCXpresso/PeripheralPins.c @@ -90,8 +90,8 @@ const PinMap PinMap_SPI_MISO[] = { const PinMap PinMap_SPI_SSEL[] = { {P0_14, SPI_0, 1}, - {P1_1, SPI_1, 4}, - {P1_2, SPI_1, 4}, + {P1_1, SPI_1, ((2 << SSELNUM_SHIFT) | 4)}, + {P1_2, SPI_1, ((3 << SSELNUM_SHIFT) | 4)}, {NC , NC , 0} }; diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC54114/TARGET_LPCXpresso/device.h b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC54114/TARGET_LPCXpresso/device.h index 3c4cd45e69..1de3f8a64e 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC54114/TARGET_LPCXpresso/device.h +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC54114/TARGET_LPCXpresso/device.h @@ -29,8 +29,8 @@ SYSCON_PDRUNCFG_PDEN_SRAM0_MASK | SYSCON_PDRUNCFG_PDEN_SRAM1_MASK | SYSCON_PDRUNCFG_PDEN_SRAM2_MASK) /* Defines used by the sleep code */ -#define LPC_CLOCK_INTERNAL_IRC BOARD_BootClockFRO12M -#define LPC_CLOCK_RUN BOARD_BootClockFROHF48M +#define LPC_CLOCK_INTERNAL_IRC BOARD_BootClockFRO12M() +#define LPC_CLOCK_RUN BOARD_BootClockFROHF48M() #define DEVICE_ID_LENGTH 24 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 65280c3729..5a7fff1298 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 @@ -104,6 +104,7 @@ typedef enum { CAN_1 = 1 } CANName; +#define SSELNUM_SHIFT 16 typedef enum { SPI_0 = Flexcomm3, SPI_1 = Flexcomm7, 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 2ccdba694b..f49cdb6f26 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 @@ -113,8 +113,8 @@ const PinMap PinMap_SPI_MISO[] = { const PinMap PinMap_SPI_SSEL[] = { {P0_4, SPI_0, 8}, - {P1_20, SPI_1, 1}, - {P1_1, SPI_2, 5}, + {P1_20, SPI_1, ((1 << SSELNUM_SHIFT) | 1)}, + {P1_1, SPI_2, ((1 << SSELNUM_SHIFT) | 5)}, {NC , NC , 0} }; diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MCU_LPC546XX/TARGET_FF_LPC546XX/PeripheralNames.h b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MCU_LPC546XX/TARGET_FF_LPC546XX/PeripheralNames.h index 7efa1e5c20..bfa92505e9 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MCU_LPC546XX/TARGET_FF_LPC546XX/PeripheralNames.h +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MCU_LPC546XX/TARGET_FF_LPC546XX/PeripheralNames.h @@ -100,6 +100,7 @@ typedef enum { CAN_1 = 1 } CANName; +#define SSELNUM_SHIFT 16 typedef enum { SPI_0 = Flexcomm0, SPI_2 = Flexcomm2, diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MCU_LPC546XX/TARGET_LPCXpresso/PeripheralNames.h b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MCU_LPC546XX/TARGET_LPCXpresso/PeripheralNames.h index 5eacd5d1d9..0eaf69c994 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MCU_LPC546XX/TARGET_LPCXpresso/PeripheralNames.h +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MCU_LPC546XX/TARGET_LPCXpresso/PeripheralNames.h @@ -100,6 +100,7 @@ typedef enum { CAN_1 = 1 } CANName; +#define SSELNUM_SHIFT 16 typedef enum { SPI_0 = Flexcomm3, SPI_1 = Flexcomm9 diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MCU_LPC546XX/TARGET_LPCXpresso/PeripheralPins.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MCU_LPC546XX/TARGET_LPCXpresso/PeripheralPins.c index 59702621e6..75aea9ab6f 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MCU_LPC546XX/TARGET_LPCXpresso/PeripheralPins.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_MCU_LPC546XX/TARGET_LPCXpresso/PeripheralPins.c @@ -107,7 +107,7 @@ const PinMap PinMap_SPI_MISO[] = { const PinMap PinMap_SPI_SSEL[] = { {P0_1, SPI_0, 2}, {P3_30, SPI_1, 1}, - {P4_6, SPI_1, 2}, + {P4_6, SPI_1, ((1 << SSELNUM_SHIFT) | 2)}, {NC , NC , 0} };