Skip to content

Commit e83f110

Browse files
committed
PORT HAL implementation
- using gpio hal port
1 parent 75c2194 commit e83f110

File tree

4 files changed

+32
-26
lines changed

4 files changed

+32
-26
lines changed

libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_K64F/gpio_api.c

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,9 @@
1818
#include "fsl_gpio_driver.h"
1919

2020
uint32_t gpio_set(PinName pin) {
21-
uint32_t instance = pin >> GPIO_PORT_SHIFT;
2221
uint32_t pin_num = pin & 0xFF;
2322

24-
port_hal_mux_control(instance, pin_num, kPortMuxAsGpio);
23+
pin_function(pin, (int)kPortMuxAsGpio);
2524
return 1 << pin_num;
2625
}
2726

@@ -51,25 +50,7 @@ void gpio_init(gpio_t *obj, PinName pin, PinDirection direction) {
5150
}
5251

5352
void gpio_mode(gpio_t *obj, PinMode mode) {
54-
uint32_t instance = obj->pinName >> GPIO_PORT_SHIFT;
55-
uint32_t pin = obj->pinName & 0xFF;
56-
57-
switch (mode) {
58-
case PullNone:
59-
port_hal_configure_pull(instance, pin, 0);
60-
port_hal_pull_select(instance, pin, kPortPullDown);
61-
break;
62-
case PullDown:
63-
port_hal_configure_pull(instance, pin, 1);
64-
port_hal_pull_select(instance, pin, kPortPullDown);
65-
break;
66-
case PullUp:
67-
port_hal_configure_pull(instance, pin, 1);
68-
port_hal_pull_select(instance, pin, kPortPullUp);
69-
break;
70-
default:
71-
break;
72-
}
53+
pin_mode(obj->pinName, mode);
7354
}
7455

7556
void gpio_dir(gpio_t *obj, PinDirection direction) {

libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_K64F/gpio_object.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ extern "C" {
2323
#endif
2424

2525
typedef struct {
26-
uint32_t pinName;
26+
PinName pinName;
2727
} gpio_t;
2828

2929
static inline void gpio_write(gpio_t *obj, int value) {

libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_K64F/objects.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,6 @@ struct gpio_irq_s {
3232
};
3333

3434
struct port_s {
35-
__IO uint32_t *reg_dir;
36-
__IO uint32_t *reg_out;
37-
__I uint32_t *reg_in;
3835
PortName port;
3936
uint32_t mask;
4037
};

libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_K64F/port_api.c

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,48 @@
1818
#include "gpio_api.h"
1919

2020
PinName port_pin(PortName port, int pin_n) {
21+
return (PinName)((port << GPIO_PORT_SHIFT) | pin_n);
2122
}
2223

2324
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) {
25+
obj->port = port;
26+
obj->mask = mask;
27+
28+
// The function is set per pin: reuse gpio logic
29+
for (uint32_t i = 0; i < 32; i++) {
30+
if (obj->mask & (1 << i)) {
31+
gpio_set(port_pin(obj->port, i));
32+
}
33+
}
34+
35+
port_dir(obj, dir);
2436
}
2537

2638
void port_mode(port_t *obj, PinMode mode) {
39+
40+
// The mode is set per pin: reuse pinmap logic
41+
for (uint32_t i = 0; i < 32; i++) {
42+
if (obj->mask & (1 << i)) {
43+
pin_mode(port_pin(obj->port, i), mode);
44+
}
45+
}
2746
}
2847

2948
void port_dir(port_t *obj, PinDirection dir) {
49+
switch (dir) {
50+
case PIN_INPUT :
51+
gpio_hal_set_port_direction((uint32_t)obj->port, kGpioDigitalInput);
52+
break;
53+
case PIN_OUTPUT:
54+
gpio_hal_set_port_direction((uint32_t)obj->port, kGpioDigitalOutput);
55+
break;
56+
}
3057
}
3158

3259
void port_write(port_t *obj, int value) {
60+
gpio_hal_write_port_output((uint32_t)obj->port, (uint32_t)(value & obj->mask));
3361
}
3462

3563
int port_read(port_t *obj) {
36-
return 1;
64+
return (int)(gpio_hal_read_port_input((uint32_t)obj->port) & obj->mask);
3765
}

0 commit comments

Comments
 (0)