From 79ee36836659369565c947cb2769e6fb83e59645 Mon Sep 17 00:00:00 2001 From: 0xc0170 Date: Thu, 10 Jul 2014 13:23:48 +0100 Subject: [PATCH 1/3] [K20D50M] PinNames correction, UART pins definitions, GPIO IRQ speed up (as KLxx) --- .../TARGET_Freescale/TARGET_K20D5M/PinNames.h | 12 ++- .../TARGET_K20D5M/analogin_api.c | 4 +- .../TARGET_K20D5M/gpio_irq_api.c | 95 ++++++++++++------- .../TARGET_K20D5M/serial_api.c | 58 ++++++++--- 4 files changed, 118 insertions(+), 51 deletions(-) diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/PinNames.h b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/PinNames.h index 8e625626e1..f9c8ff93f2 100644 --- a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/PinNames.h +++ b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/PinNames.h @@ -197,10 +197,10 @@ typedef enum { LED_BLUE = PTA2, // mbed original LED naming - LED1 = LED_BLUE, + LED1 = LED_RED, LED2 = LED_GREEN, - LED3 = LED_RED, - LED4 = LED_RED, + LED3 = LED_BLUE, + LED4 = LED_BLUE, // USB Pins USBTX = PTB17, @@ -231,6 +231,12 @@ typedef enum { A4 = PTB1, A5 = PTB0, + I2C_SCL = D15, + I2C_SDA = D14, + + TSI_ELEC0 = PTB16, + TSI_ELEC1 = PTB17, + // Not connected NC = (int)0xFFFFFFFF } PinName; diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/analogin_api.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/analogin_api.c index 8ecbcb2770..62e3289ea1 100644 --- a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/analogin_api.c +++ b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/analogin_api.c @@ -20,6 +20,8 @@ #include "pinmap.h" #include "clk_freqs.h" +#define MAX_FADC 6000000 + static const PinMap PinMap_ADC[] = { {PTC2, ADC0_SE4b, 0}, {PTD1, ADC0_SE5b, 0}, @@ -34,8 +36,6 @@ static const PinMap PinMap_ADC[] = { {NC, NC, 0} }; -#define MAX_FADC 6000000 - void analogin_init(analogin_t *obj, PinName pin) { obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC); MBED_ASSERT(obj->adc != (ADCName)NC); diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/gpio_irq_api.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/gpio_irq_api.c index 80507abba4..9637eccd60 100644 --- a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/gpio_irq_api.c +++ b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/gpio_irq_api.c @@ -29,46 +29,73 @@ static gpio_irq_handler irq_handler; #define IRQ_FALLING_EDGE PORT_PCR_IRQC(10) #define IRQ_EITHER_EDGE PORT_PCR_IRQC(11) +static const uint32_t search_bits[] = {0x0000FFFF, 0x000000FF, 0x0000000F, 0x00000003, 0x00000001}; + + static void handle_interrupt_in(PORT_Type *port, int ch_base) { - uint32_t mask = 0, i; + uint32_t isfr; + uint32_t location; - for (i = 0; i < 32; i++) { - uint32_t pmask = (1 << i); - if (port->ISFR & pmask) { - mask |= pmask; - uint32_t id = channel_ids[ch_base + i]; - if (id == 0) - continue; - - GPIO_Type *gpio = PTA; - gpio_irq_event event = IRQ_NONE; - uint32_t port_num = (port - PORTA) >> 12; - switch (port->PCR[i] & PORT_PCR_IRQC_MASK) { - case IRQ_RAISING_EDGE: - event = IRQ_RISE; - break; - - case IRQ_FALLING_EDGE: - event = IRQ_FALL; - break; - - case IRQ_EITHER_EDGE: - gpio += (port_num * 0x40); - event = (gpio->PDIR & pmask) ? (IRQ_RISE) : (IRQ_FALL); - break; - } - if (event != IRQ_NONE) - irq_handler(id, event); + while((isfr = port->ISFR) != 0) { + location = 0; + for (int i = 0; i < 5; i++) { + if (!(isfr & (search_bits[i] << location))) + location += 1 << (4 - i); } + + uint32_t id = channel_ids[ch_base + location]; + if (id == 0) { + continue; + } + + GPIO_Type *gpio = PTA; + gpio_irq_event event = IRQ_NONE; + uint32_t port_num = (port - PORTA) >> 12; + switch (port->PCR[location] & PORT_PCR_IRQC_MASK) { + case IRQ_RAISING_EDGE: + event = IRQ_RISE; + break; + + case IRQ_FALLING_EDGE: + event = IRQ_FALL; + break; + + case IRQ_EITHER_EDGE: + gpio += (port_num * 0x40); + event = (gpio->PDIR & (1 << location)) ? (IRQ_RISE) : (IRQ_FALL); + break; + } + if (event != IRQ_NONE) { + irq_handler(id, event); + } + port->ISFR = 1 << location; } - port->ISFR = mask; } -void gpio_irqA(void) {handle_interrupt_in(PORTA, 0);} -void gpio_irqB(void) {handle_interrupt_in(PORTB, 32);} -void gpio_irqC(void) {handle_interrupt_in(PORTC, 64);} -void gpio_irqD(void) {handle_interrupt_in(PORTD, 96);} -void gpio_irqE(void) {handle_interrupt_in(PORTE, 128);} +void gpio_irqA(void) { + handle_interrupt_in(PORTA, 0); +} + +void gpio_irqB(void) +{ + handle_interrupt_in(PORTB, 32); +} + +void gpio_irqC(void) +{ + handle_interrupt_in(PORTC, 64); +} + +void gpio_irqD(void) +{ + handle_interrupt_in(PORTD, 96); +} + +void gpio_irqE(void) +{ + handle_interrupt_in(PORTE, 128); +} + int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32_t id) { if (pin == NC) diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/serial_api.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/serial_api.c index 075b587308..bb759a77de 100644 --- a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/serial_api.c +++ b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/serial_api.c @@ -26,12 +26,20 @@ static const PinMap PinMap_UART_TX[] = { {PTB17, UART_0, 3}, - {NC , NC , 0} + {PTC4 , UART_1, 3}, + {PTD3 , UART_2, 3}, + {PTD7 , UART_0, 3}, + {PTE0 , UART_1, 3}, + {NC , NC , 0} }; static const PinMap PinMap_UART_RX[] = { {PTB16, UART_0, 3}, - {NC , NC , 0} + {PTC3 , UART_1, 3}, + {PTD2 , UART_2, 3}, + {PTD6 , UART_0, 3}, + {PTE1 , UART_1, 3}, + {NC , NC , 0} }; #define UART_NUM 3 @@ -52,18 +60,33 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) { obj->uart = (UART_Type *)uart; // enable clk switch (uart) { - case UART_0: SIM->SOPT2 |= SIM_SOPT2_PLLFLLSEL_MASK; - SIM->SCGC5 |= SIM_SCGC5_PORTA_MASK; SIM->SCGC4 |= SIM_SCGC4_UART0_MASK; break; - case UART_1: SIM->SCGC5 |= SIM_SCGC5_PORTC_MASK; SIM->SCGC4 |= SIM_SCGC4_UART1_MASK; break; - case UART_2: SIM->SCGC5 |= SIM_SCGC5_PORTD_MASK; SIM->SCGC4 |= SIM_SCGC4_UART2_MASK; break; + case UART_0: + SIM->SOPT2 |= SIM_SOPT2_PLLFLLSEL_MASK; + SIM->SCGC5 |= SIM_SCGC5_PORTA_MASK; + SIM->SCGC4 |= SIM_SCGC4_UART0_MASK; + break; + case UART_1: + SIM->SCGC5 |= SIM_SCGC5_PORTC_MASK; + SIM->SCGC4 |= SIM_SCGC4_UART1_MASK; + break; + case UART_2: + SIM->SCGC5 |= SIM_SCGC5_PORTD_MASK; + SIM->SCGC4 |= SIM_SCGC4_UART2_MASK; + break; } // Disable UART before changing registers obj->uart->C2 &= ~(UART_C2_RE_MASK | UART_C2_TE_MASK); switch (uart) { - case UART_0: obj->index = 0; break; - case UART_1: obj->index = 1; break; - case UART_2: obj->index = 2; break; + case UART_0: + obj->index = 0; + break; + case UART_1: + obj->index = 1; + break; + case UART_2: + obj->index = 2; + break; } // set default baud rate and format @@ -131,9 +154,20 @@ void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_b uint32_t parity_enable, parity_select; switch (parity) { - case ParityNone: parity_enable = 0; parity_select = 0; break; - case ParityOdd : parity_enable = 1; parity_select = 1; data_bits++; break; - case ParityEven: parity_enable = 1; parity_select = 0; data_bits++; break; + case ParityNone: + parity_enable = 0; + parity_select = 0; + break; + case ParityOdd : + parity_enable = 1; + parity_select = 1; + data_bits++; + break; + case ParityEven: + parity_enable = 1; + parity_select = 0; + data_bits++; + break; default: break; } From cf645e8fa15e3af6f0fff7a422a50e1882355305 Mon Sep 17 00:00:00 2001 From: 0xc0170 Date: Thu, 10 Jul 2014 13:42:41 +0100 Subject: [PATCH 2/3] [K20D50M] K20D50M - correct target name --- .../{TARGET_K20D5M => TARGET_K20D50M}/MK20D5.h | 0 .../TOOLCHAIN_ARM_STD/MK20D5.sct | 0 .../TOOLCHAIN_ARM_STD/startup_MK20D5.s | 0 .../TOOLCHAIN_ARM_STD/sys.cpp | 0 .../TOOLCHAIN_GCC_ARM/MK20D5.ld | 0 .../TOOLCHAIN_GCC_ARM/startup_MK20D5.s | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/cmsis.h | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/cmsis_nvic.c | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/cmsis_nvic.h | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/system_MK20D5.c | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/system_MK20D5.h | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/PeripheralNames.h | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/PinNames.h | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/PortNames.h | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/analogin_api.c | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/clk_freqs.h | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/device.h | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/gpio_api.c | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/gpio_irq_api.c | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/gpio_object.h | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/i2c_api.c | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/objects.h | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/pinmap.c | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/port_api.c | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/pwmout_api.c | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/rtc_api.c | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/serial_api.c | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/sleep.c | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/spi_api.c | 0 .../{TARGET_K20D5M => TARGET_K20D50M}/us_ticker.c | 0 workspace_tools/build_release.py | 1 + .../export/{gcc_arm_k20d5m.tmpl => gcc_arm_k20d50m.tmpl} | 0 workspace_tools/export/gccarm.py | 2 +- workspace_tools/export/uvision4.py | 2 +- ...uvision4_k20d5m.uvopt.tmpl => uvision4_k20d50m.uvopt.tmpl} | 0 ...ision4_k20d5m.uvproj.tmpl => uvision4_k20d50m.uvproj.tmpl} | 0 workspace_tools/targets.py | 4 ++-- 37 files changed, 5 insertions(+), 4 deletions(-) rename libraries/mbed/targets/cmsis/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/MK20D5.h (100%) rename libraries/mbed/targets/cmsis/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/TOOLCHAIN_ARM_STD/MK20D5.sct (100%) rename libraries/mbed/targets/cmsis/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/TOOLCHAIN_ARM_STD/startup_MK20D5.s (100%) rename libraries/mbed/targets/cmsis/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/TOOLCHAIN_ARM_STD/sys.cpp (100%) rename libraries/mbed/targets/cmsis/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/TOOLCHAIN_GCC_ARM/MK20D5.ld (100%) rename libraries/mbed/targets/cmsis/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/TOOLCHAIN_GCC_ARM/startup_MK20D5.s (100%) rename libraries/mbed/targets/cmsis/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/cmsis.h (100%) rename libraries/mbed/targets/cmsis/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/cmsis_nvic.c (100%) rename libraries/mbed/targets/cmsis/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/cmsis_nvic.h (100%) rename libraries/mbed/targets/cmsis/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/system_MK20D5.c (100%) rename libraries/mbed/targets/cmsis/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/system_MK20D5.h (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/PeripheralNames.h (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/PinNames.h (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/PortNames.h (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/analogin_api.c (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/clk_freqs.h (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/device.h (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/gpio_api.c (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/gpio_irq_api.c (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/gpio_object.h (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/i2c_api.c (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/objects.h (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/pinmap.c (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/port_api.c (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/pwmout_api.c (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/rtc_api.c (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/serial_api.c (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/sleep.c (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/spi_api.c (100%) rename libraries/mbed/targets/hal/TARGET_Freescale/{TARGET_K20D5M => TARGET_K20D50M}/us_ticker.c (100%) rename workspace_tools/export/{gcc_arm_k20d5m.tmpl => gcc_arm_k20d50m.tmpl} (100%) rename workspace_tools/export/{uvision4_k20d5m.uvopt.tmpl => uvision4_k20d50m.uvopt.tmpl} (100%) rename workspace_tools/export/{uvision4_k20d5m.uvproj.tmpl => uvision4_k20d50m.uvproj.tmpl} (100%) diff --git a/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/MK20D5.h b/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/MK20D5.h similarity index 100% rename from libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/MK20D5.h rename to libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/MK20D5.h diff --git a/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/TOOLCHAIN_ARM_STD/MK20D5.sct b/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_ARM_STD/MK20D5.sct similarity index 100% rename from libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/TOOLCHAIN_ARM_STD/MK20D5.sct rename to libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_ARM_STD/MK20D5.sct diff --git a/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/TOOLCHAIN_ARM_STD/startup_MK20D5.s b/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_ARM_STD/startup_MK20D5.s similarity index 100% rename from libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/TOOLCHAIN_ARM_STD/startup_MK20D5.s rename to libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_ARM_STD/startup_MK20D5.s diff --git a/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/TOOLCHAIN_ARM_STD/sys.cpp b/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_ARM_STD/sys.cpp similarity index 100% rename from libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/TOOLCHAIN_ARM_STD/sys.cpp rename to libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_ARM_STD/sys.cpp diff --git a/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/TOOLCHAIN_GCC_ARM/MK20D5.ld b/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/MK20D5.ld similarity index 100% rename from libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/TOOLCHAIN_GCC_ARM/MK20D5.ld rename to libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/MK20D5.ld diff --git a/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/TOOLCHAIN_GCC_ARM/startup_MK20D5.s b/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/startup_MK20D5.s similarity index 100% rename from libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/TOOLCHAIN_GCC_ARM/startup_MK20D5.s rename to libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/startup_MK20D5.s diff --git a/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/cmsis.h b/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/cmsis.h similarity index 100% rename from libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/cmsis.h rename to libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/cmsis.h diff --git a/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/cmsis_nvic.c b/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/cmsis_nvic.c similarity index 100% rename from libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/cmsis_nvic.c rename to libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/cmsis_nvic.c diff --git a/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/cmsis_nvic.h b/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/cmsis_nvic.h similarity index 100% rename from libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/cmsis_nvic.h rename to libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/cmsis_nvic.h diff --git a/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/system_MK20D5.c b/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/system_MK20D5.c similarity index 100% rename from libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/system_MK20D5.c rename to libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/system_MK20D5.c diff --git a/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/system_MK20D5.h b/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/system_MK20D5.h similarity index 100% rename from libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D5M/system_MK20D5.h rename to libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/system_MK20D5.h diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/PeripheralNames.h b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/PeripheralNames.h similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/PeripheralNames.h rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/PeripheralNames.h diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/PinNames.h b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/PinNames.h similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/PinNames.h rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/PinNames.h diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/PortNames.h b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/PortNames.h similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/PortNames.h rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/PortNames.h diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/analogin_api.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/analogin_api.c similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/analogin_api.c rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/analogin_api.c diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/clk_freqs.h b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/clk_freqs.h similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/clk_freqs.h rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/clk_freqs.h diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/device.h b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/device.h similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/device.h rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/device.h diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/gpio_api.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/gpio_api.c similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/gpio_api.c rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/gpio_api.c diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/gpio_irq_api.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/gpio_irq_api.c similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/gpio_irq_api.c rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/gpio_irq_api.c diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/gpio_object.h b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/gpio_object.h similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/gpio_object.h rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/gpio_object.h diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/i2c_api.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/i2c_api.c similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/i2c_api.c rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/i2c_api.c diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/objects.h b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/objects.h similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/objects.h rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/objects.h diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/pinmap.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/pinmap.c similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/pinmap.c rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/pinmap.c diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/port_api.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/port_api.c similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/port_api.c rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/port_api.c diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/pwmout_api.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/pwmout_api.c similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/pwmout_api.c rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/pwmout_api.c diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/rtc_api.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/rtc_api.c similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/rtc_api.c rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/rtc_api.c diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/serial_api.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/serial_api.c similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/serial_api.c rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/serial_api.c diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/sleep.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/sleep.c similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/sleep.c rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/sleep.c diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/spi_api.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/spi_api.c similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/spi_api.c rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/spi_api.c diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/us_ticker.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/us_ticker.c similarity index 100% rename from libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/us_ticker.c rename to libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/us_ticker.c diff --git a/workspace_tools/build_release.py b/workspace_tools/build_release.py index ac30839b46..ac1aed66ad 100755 --- a/workspace_tools/build_release.py +++ b/workspace_tools/build_release.py @@ -45,6 +45,7 @@ OFFICIAL_MBED_LIBRARY_BUILD = ( ('KL25Z', ('ARM', 'GCC_ARM')), ('KL46Z', ('ARM', 'GCC_ARM')), ('K64F', ('ARM', 'GCC_ARM')), + ('K20D50M', ('ARM', 'GCC_ARM')), ('NUCLEO_F030R8', ('ARM', 'uARM')), ('NUCLEO_F072RB', ('ARM', 'uARM')), diff --git a/workspace_tools/export/gcc_arm_k20d5m.tmpl b/workspace_tools/export/gcc_arm_k20d50m.tmpl similarity index 100% rename from workspace_tools/export/gcc_arm_k20d5m.tmpl rename to workspace_tools/export/gcc_arm_k20d50m.tmpl diff --git a/workspace_tools/export/gccarm.py b/workspace_tools/export/gccarm.py index 7ab1d3b1f3..8f3d2732ef 100644 --- a/workspace_tools/export/gccarm.py +++ b/workspace_tools/export/gccarm.py @@ -28,7 +28,7 @@ class GccArm(Exporter): 'KL25Z', 'KL46Z', 'K64F', - 'K20D5M', + 'K20D50M', 'LPC4088', 'LPC11U24', 'LPC1114', diff --git a/workspace_tools/export/uvision4.py b/workspace_tools/export/uvision4.py index 57a105e980..5fcbebf731 100644 --- a/workspace_tools/export/uvision4.py +++ b/workspace_tools/export/uvision4.py @@ -28,7 +28,7 @@ class Uvision4(Exporter): 'KL25Z', 'KL46Z', 'K64F', - 'K20D5M', + 'K20D50M', 'LPC1347', 'LPC1114', 'LPC11C24', diff --git a/workspace_tools/export/uvision4_k20d5m.uvopt.tmpl b/workspace_tools/export/uvision4_k20d50m.uvopt.tmpl similarity index 100% rename from workspace_tools/export/uvision4_k20d5m.uvopt.tmpl rename to workspace_tools/export/uvision4_k20d50m.uvopt.tmpl diff --git a/workspace_tools/export/uvision4_k20d5m.uvproj.tmpl b/workspace_tools/export/uvision4_k20d50m.uvproj.tmpl similarity index 100% rename from workspace_tools/export/uvision4_k20d5m.uvproj.tmpl rename to workspace_tools/export/uvision4_k20d50m.uvproj.tmpl diff --git a/workspace_tools/targets.py b/workspace_tools/targets.py index 04b2a8a582..f188eb235c 100644 --- a/workspace_tools/targets.py +++ b/workspace_tools/targets.py @@ -124,7 +124,7 @@ class KL46Z(Target): self.is_disk_virtual = True -class K20D5M(Target): +class K20D50M(Target): def __init__(self): Target.__init__(self) self.core = "Cortex-M4" @@ -550,7 +550,7 @@ TARGETS = [ KL05Z(), KL25Z(), KL46Z(), - K20D5M(), + K20D50M(), K64F(), LPC812(), LPC810(), From 0de2a8946d006020a83009d40722fbbb337ad9c3 Mon Sep 17 00:00:00 2001 From: 0xc0170 Date: Thu, 10 Jul 2014 14:37:46 +0100 Subject: [PATCH 3/3] [K20D50M] GPIO IRQ - CLZ to get position in irq handler --- .../TARGET_K20D50M/gpio_irq_api.c | 25 ++++++------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/gpio_irq_api.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/gpio_irq_api.c index 9637eccd60..15f31b083a 100644 --- a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/gpio_irq_api.c +++ b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/gpio_irq_api.c @@ -29,21 +29,13 @@ static gpio_irq_handler irq_handler; #define IRQ_FALLING_EDGE PORT_PCR_IRQC(10) #define IRQ_EITHER_EDGE PORT_PCR_IRQC(11) -static const uint32_t search_bits[] = {0x0000FFFF, 0x000000FF, 0x0000000F, 0x00000003, 0x00000001}; - - static void handle_interrupt_in(PORT_Type *port, int ch_base) { uint32_t isfr; - uint32_t location; + uint32_t pin; - while((isfr = port->ISFR) != 0) { - location = 0; - for (int i = 0; i < 5; i++) { - if (!(isfr & (search_bits[i] << location))) - location += 1 << (4 - i); - } - - uint32_t id = channel_ids[ch_base + location]; + while ((isfr = port->ISFR) != 0) { + pin = 31 - __CLZ(isfr); + uint32_t id = channel_ids[ch_base + pin]; if (id == 0) { continue; } @@ -51,24 +43,23 @@ static void handle_interrupt_in(PORT_Type *port, int ch_base) { GPIO_Type *gpio = PTA; gpio_irq_event event = IRQ_NONE; uint32_t port_num = (port - PORTA) >> 12; - switch (port->PCR[location] & PORT_PCR_IRQC_MASK) { + + switch (port->PCR[pin] & PORT_PCR_IRQC_MASK) { case IRQ_RAISING_EDGE: event = IRQ_RISE; break; - case IRQ_FALLING_EDGE: event = IRQ_FALL; break; - case IRQ_EITHER_EDGE: gpio += (port_num * 0x40); - event = (gpio->PDIR & (1 << location)) ? (IRQ_RISE) : (IRQ_FALL); + event = (gpio->PDIR & (1 << pin)) ? (IRQ_RISE) : (IRQ_FALL); break; } if (event != IRQ_NONE) { irq_handler(id, event); } - port->ISFR = 1 << location; + port->ISFR = 1 << pin; } }