Skip to content

Commit 26d8cf4

Browse files
committed
KSDK - drivers layer removal, mbed HAL using only KSDK HAL
- ADC corrections with channels, and clock configuration
1 parent 67ebe14 commit 26d8cf4

File tree

90 files changed

+90
-25999
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+90
-25999
lines changed

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

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -68,28 +68,29 @@ typedef enum {
6868
PWM_24 = (2 << TPM_SHIFT) | (7), // FTM2 CH7
6969
} PWMName;
7070

71-
#define ADC_SHIFT 8
71+
#define ADC_INSTANCE_SHIFT 8
72+
#define ADC_B_CHANNEL_SHIFT 5
7273
typedef enum {
73-
ADC0_SE4b = (0 << ADC_SHIFT) | 4,
74-
ADC0_SE5b = (0 << ADC_SHIFT) | 5,
75-
ADC0_SE6b = (0 << ADC_SHIFT) | 6,
76-
ADC0_SE7b = (0 << ADC_SHIFT) | 7,
77-
ADC0_SE8 = (0 << ADC_SHIFT) | 8,
78-
ADC0_SE9 = (0 << ADC_SHIFT) | 9,
79-
ADC0_SE12 = (0 << ADC_SHIFT) | 12,
80-
ADC0_SE13 = (0 << ADC_SHIFT) | 13,
81-
ADC0_SE14 = (0 << ADC_SHIFT) | 14,
82-
ADC0_SE15 = (0 << ADC_SHIFT) | 15,
83-
ADC1_SE4b = (1 << ADC_SHIFT) | 4,
84-
ADC1_SE5b = (1 << ADC_SHIFT) | 5,
85-
ADC1_SE6b = (1 << ADC_SHIFT) | 6,
86-
ADC1_SE7b = (1 << ADC_SHIFT) | 7,
87-
ADC1_SE8 = (1 << ADC_SHIFT) | 8,
88-
ADC1_SE9 = (1 << ADC_SHIFT) | 9,
89-
ADC1_SE12 = (1 << ADC_SHIFT) | 12,
90-
ADC1_SE13 = (1 << ADC_SHIFT) | 13,
91-
ADC1_SE14 = (1 << ADC_SHIFT) | 14,
92-
ADC1_SE15 = (1 << ADC_SHIFT) | 15
74+
ADC0_SE4b = (0 << ADC_INSTANCE_SHIFT) | (1 << ADC_B_CHANNEL_SHIFT) | 4,
75+
ADC0_SE5b = (0 << ADC_INSTANCE_SHIFT) | (1 << ADC_B_CHANNEL_SHIFT) | 5,
76+
ADC0_SE6b = (0 << ADC_INSTANCE_SHIFT) | (1 << ADC_B_CHANNEL_SHIFT) | 6,
77+
ADC0_SE7b = (0 << ADC_INSTANCE_SHIFT) | (1 << ADC_B_CHANNEL_SHIFT) | 7,
78+
ADC0_SE8 = (0 << ADC_INSTANCE_SHIFT) | 8,
79+
ADC0_SE9 = (0 << ADC_INSTANCE_SHIFT) | 9,
80+
ADC0_SE12 = (0 << ADC_INSTANCE_SHIFT) | 12,
81+
ADC0_SE13 = (0 << ADC_INSTANCE_SHIFT) | 13,
82+
ADC0_SE14 = (0 << ADC_INSTANCE_SHIFT) | 14,
83+
ADC0_SE15 = (0 << ADC_INSTANCE_SHIFT) | 15,
84+
ADC1_SE4b = (1 << ADC_INSTANCE_SHIFT) | 4,
85+
ADC1_SE5b = (1 << ADC_INSTANCE_SHIFT) | 5,
86+
ADC1_SE6b = (1 << ADC_INSTANCE_SHIFT) | 6,
87+
ADC1_SE7b = (1 << ADC_INSTANCE_SHIFT) | 7,
88+
ADC1_SE8 = (1 << ADC_INSTANCE_SHIFT) | 8,
89+
ADC1_SE9 = (1 << ADC_INSTANCE_SHIFT) | 9,
90+
ADC1_SE12 = (1 << ADC_INSTANCE_SHIFT) | 12,
91+
ADC1_SE13 = (1 << ADC_INSTANCE_SHIFT) | 13,
92+
ADC1_SE14 = (1 << ADC_INSTANCE_SHIFT) | 14,
93+
ADC1_SE15 = (1 << ADC_INSTANCE_SHIFT) | 15
9394
} ADCName;
9495

9596
typedef enum {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
#define MBED_PINNAMES_H
1818

1919
#include "cmsis.h"
20-
#include "fsl_gpio_driver.h"
2120

2221
#ifdef __cplusplus
2322
extern "C" {
@@ -28,6 +27,8 @@ typedef enum {
2827
PIN_OUTPUT
2928
} PinDirection;
3029

30+
#define GPIO_PORT_SHIFT 12
31+
3132
typedef enum {
3233
/* PTA0 - PTA3 reserved for JTAG pins */
3334
PTA4 = (0 << GPIO_PORT_SHIFT | 4),

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

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,38 +18,57 @@
1818
#include "cmsis.h"
1919
#include "pinmap.h"
2020
#include "error.h"
21-
#include "fsl_adc_driver.h"
2221
#include "PeripheralNames.h"
23-
22+
#include "fsl_adc_hal.h"
23+
#include "fsl_clock_manager.h"
24+
25+
#define MAX_FADC 6000000
26+
2427
static const PinMap PinMap_ADC[] = {
2528
{PTC0, ADC0_SE14, 0},
2629
{NC, NC, 0}
2730
};
2831

2932
void analogin_init(analogin_t *obj, PinName pin) {
3033
obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC);
31-
adc_user_config_t module_config;
32-
uint32_t instance = obj->adc >> ADC_SHIFT;
34+
if (obj->adc == (ADCName)NC) {
35+
error("ADC pin mapping failed");
36+
}
37+
uint32_t instance = obj->adc >> ADC_INSTANCE_SHIFT;
3338

34-
module_config.clockSourceMode = kAdcClockSourceBusClk;
35-
module_config.clockSourceDividerMode = kAdcClockDivider8;
36-
module_config.resolutionMode = kAdcSingleDiff16;
37-
module_config.referenceVoltageMode = kAdcVoltageVref;
38-
module_config.isContinuousEnabled = false;
39+
clock_manager_set_gate(kClockModuleADC, instance, true);
3940

40-
adc_init(instance, &module_config);
41+
uint32_t bus_clock;
42+
clock_manager_get_frequency(kBusClock, &bus_clock);
43+
uint32_t clkdiv;
44+
for (clkdiv = 0; clkdiv < 4; clkdiv++) {
45+
if ((bus_clock >> clkdiv) <= MAX_FADC)
46+
break;
47+
}
48+
if (clkdiv == 4) {//Set max div
49+
clkdiv = 0x7;
50+
}
4151

42-
obj->channel_cfg.channelId =(adc_channel_mode_t)(obj->adc & 0xF);
43-
obj->channel_cfg.isDifferentialEnabled = false;
44-
obj->channel_cfg.isInterruptEnabled = false;
45-
obj->channel_cfg.muxSelect = kAdcChannelMuxB;
46-
adc_start_conversion(instance, &obj->channel_cfg);
52+
adc_hal_set_clock_source_mode(instance, (adc_clock_source_mode_t)(clkdiv >> 2));
53+
adc_hal_set_clock_divider_mode(instance, (adc_clock_divider_mode_t)(clkdiv & 0x3));
54+
adc_hal_set_reference_voltage_mode(instance, kAdcVoltageVref);
55+
adc_hal_set_resolution_mode(instance, kAdcSingleDiff16);
56+
adc_hal_configure_continuous_conversion(instance, false);
4757

58+
adc_group_mux_mode_t mode = (obj->adc & (1 << ADC_B_CHANNEL_SHIFT)) ?
59+
kAdcChannelMuxB : kAdcChannelMuxA;
60+
adc_hal_disable(instance, mode);
61+
adc_hal_set_group_mux(instance, mode);
62+
adc_hal_enable(instance, mode, (adc_channel_mode_t)(obj->adc & 0xF), false);
4863
}
4964

5065
uint16_t analogin_read_u16(analogin_t *obj) {
51-
adc_start_conversion(obj->adc >> ADC_SHIFT, &obj->channel_cfg);
52-
return (uint16_t)adc_get_conversion_value(obj->adc >> ADC_SHIFT, &obj->channel_cfg);
66+
uint32_t instance = obj->adc >> ADC_INSTANCE_SHIFT;
67+
adc_group_mux_mode_t mode = (obj->adc & (1 << ADC_B_CHANNEL_SHIFT)) ?
68+
kAdcChannelMuxB : kAdcChannelMuxA;
69+
adc_hal_enable(instance, mode, (adc_channel_mode_t)(obj->adc & 0xF), false);
70+
while (!adc_hal_is_conversion_completed(instance, mode));
71+
return adc_hal_get_conversion_value(instance, mode);
5372
}
5473

5574
float analogin_read(analogin_t *obj) {

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
#include "cmsis.h"
1919
#include "pinmap.h"
2020
#include "error.h"
21-
#include "fsl_gpio_driver.h"
2221

2322
#define RANGE_12BIT 0xFFF
2423

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

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
*/
1616
#include "gpio_api.h"
1717
#include "pinmap.h"
18-
#include "fsl_gpio_driver.h"
18+
#include "fsl_port_hal.h"
19+
#include "fsl_gpio_hal.h"
20+
#include "fsl_sim_hal.h"
1921

2022
uint32_t gpio_set(PinName pin) {
2123
uint32_t pin_num = pin & 0xFF;
@@ -29,38 +31,36 @@ void gpio_init(gpio_t *obj, PinName pin, PinDirection direction) {
2931
return;
3032
}
3133

32-
if (direction) {
33-
gpio_output_pin_t output = {0};
34+
obj->pinName = pin;
35+
uint32_t port = pin >> GPIO_PORT_SHIFT;
36+
uint32_t pin_num = pin & 0xFF;
37+
clock_hal_set_gate(kSimClockModulePORT, port, true);
3438

35-
obj->pinName = pin;
36-
output.pinName = pin;
37-
output.config.outputLogic = 0;
38-
output.config.slewRate = kPortSlowSlewRate;
39-
output.config.driveStrength = kPortLowDriveStrength,
40-
sdk_gpio_output_pin_init((const gpio_output_pin_t *)&output);
39+
if (direction) {
40+
gpio_hal_set_pin_direction(port, pin_num, kGpioDigitalOutput);
41+
gpio_hal_write_pin_output(port, pin_num, 1);
4142
} else {
42-
gpio_input_pin_t input = {0};
43-
obj->pinName = pin;
44-
input.pinName = pin;
45-
input.config.isPullEnable = true;
46-
input.config.pullSelect = kPortPullUp;
47-
input.config.isPassiveFilterEnabled = false;
48-
input.config.interrupt = kPortIntDisabled;
49-
sdk_gpio_input_pin_init((const gpio_input_pin_t *)&input);
43+
gpio_hal_set_pin_direction(port, pin_num, kGpioDigitalInput);
44+
port_hal_configure_pull(port, pin_num, true);
45+
port_hal_pull_select(port, pin_num, kPortPullUp);
5046
}
47+
port_hal_mux_control(port, pin_num, kPortMuxAsGpio);
5148
}
5249

5350
void gpio_mode(gpio_t *obj, PinMode mode) {
5451
pin_mode(obj->pinName, mode);
5552
}
5653

5754
void gpio_dir(gpio_t *obj, PinDirection direction) {
55+
uint32_t port = obj->pinName >> GPIO_PORT_SHIFT;
56+
uint32_t pin_num = obj->pinName & 0xFF;
57+
5858
switch (direction) {
5959
case PIN_INPUT:
60-
sdk_gpio_set_pin_direction(obj->pinName, kGpioDigitalInput);
60+
gpio_hal_set_pin_direction(port, pin_num, kGpioDigitalInput);
6161
break;
6262
case PIN_OUTPUT:
63-
sdk_gpio_set_pin_direction(obj->pinName, kGpioDigitalOutput);
63+
gpio_hal_set_pin_direction(port, pin_num, kGpioDigitalOutput);
6464
break;
6565
}
6666
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
#include "cmsis.h"
1818

1919
#include "gpio_irq_api.h"
20-
#include "fsl_gpio_driver.h"
2120
#include "fsl_gpio_hal.h"
2221
#include "fsl_port_hal.h"
2322
#include "error.h"

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
#ifndef MBED_GPIO_OBJECT_H
1717
#define MBED_GPIO_OBJECT_H
1818

19-
#include "fsl_gpio_driver.h"
19+
#include "fsl_gpio_hal.h"
2020

2121
#ifdef __cplusplus
2222
extern "C" {
@@ -27,11 +27,17 @@ typedef struct {
2727
} gpio_t;
2828

2929
static inline void gpio_write(gpio_t *obj, int value) {
30-
sdk_gpio_write_pin_output(obj->pinName, (uint32_t)value);
30+
uint32_t port = obj->pinName >> GPIO_PORT_SHIFT;
31+
uint32_t pin = obj->pinName & 0xFF;
32+
33+
gpio_hal_write_pin_output(port, pin, value);
3134
}
3235

3336
static inline int gpio_read(gpio_t *obj) {
34-
return (int)sdk_gpio_read_pin_input(obj->pinName);
37+
uint32_t port = obj->pinName >> GPIO_PORT_SHIFT;
38+
uint32_t pin = obj->pinName & 0xFF;
39+
40+
return (int)gpio_hal_read_pin_input(port, pin);
3541
}
3642

3743
#ifdef __cplusplus

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#include "PortNames.h"
2121
#include "PeripheralNames.h"
2222
#include "PinNames.h"
23-
#include "fsl_adc_driver.h"
2423

2524
#ifdef __cplusplus
2625
extern "C" {
@@ -47,7 +46,6 @@ struct serial_s {
4746

4847
struct analogin_s {
4948
ADCName adc;
50-
adc_channel_config_t channel_cfg;
5149
};
5250

5351
struct i2c_s {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "pinmap.h"
1717
#include "error.h"
1818
#include "fsl_clock_manager.h"
19+
#include "fsl_port_hal.h"
1920

2021
void pin_function(PinName pin, int function) {
2122
if (pin == (PinName)NC) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
#include <stddef.h>
1717
#include "us_ticker_api.h"
1818
#include "PeripheralNames.h"
19-
#include "fsl_pit_driver.h"
19+
#include "fsl_pit_hal.h"
2020
#include "fsl_sim_hal.h"
2121
#include "fsl_clock_manager.h"
2222
#include "fsl_clock_configs.h"

0 commit comments

Comments
 (0)