From 3a9ef7db0c508ead737bc50ab5fab12030e1691f Mon Sep 17 00:00:00 2001 From: Jonas Arnold Date: Fri, 30 Sep 2022 16:06:08 +0200 Subject: [PATCH] finished implementation of init splitflap removed pin mux fixed hardfault (by adding clocking of port) --- .../ADIS_tinyK22_SplitFlap.mex | 149 ++++++++++++++++++ ADIS_tinyK22_SplitFlap/board/pin_mux.c | 17 +- ADIS_tinyK22_SplitFlap/board/pin_mux.h | 13 -- ADIS_tinyK22_SplitFlap/source/application.c | 12 +- ADIS_tinyK22_SplitFlap/source/main.c | 2 +- ADIS_tinyK22_SplitFlap/source/platform.c | 6 + ADIS_tinyK22_SplitFlap/source/splitflap.c | 19 ++- ADIS_tinyK22_SplitFlap/source/splitflap.h | 3 +- 8 files changed, 186 insertions(+), 35 deletions(-) create mode 100644 ADIS_tinyK22_SplitFlap/ADIS_tinyK22_SplitFlap.mex diff --git a/ADIS_tinyK22_SplitFlap/ADIS_tinyK22_SplitFlap.mex b/ADIS_tinyK22_SplitFlap/ADIS_tinyK22_SplitFlap.mex new file mode 100644 index 0000000..9d0707e --- /dev/null +++ b/ADIS_tinyK22_SplitFlap/ADIS_tinyK22_SplitFlap.mex @@ -0,0 +1,149 @@ + + + + MK22FN512xxx12 + MK22FN512VLH12 + ksdk2_0 + + + + Configuration imported from ADIS_tinyK22_SplitFlap + + + true + false + false + true + false + + + + + + + + + 12.0.0 + + + + + + + Configures pin routing and optionally pin electrical features. + + true + core0 + true + + + + + true + + + + + + + + + + + + + + 12.0.0 + + + + + + + + + true + + + + + + + + + + + + + + + + true + + + + + + + N/A + + + + + + + + + + 12.0.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + \ No newline at end of file diff --git a/ADIS_tinyK22_SplitFlap/board/pin_mux.c b/ADIS_tinyK22_SplitFlap/board/pin_mux.c index d9a3ff4..7253568 100644 --- a/ADIS_tinyK22_SplitFlap/board/pin_mux.c +++ b/ADIS_tinyK22_SplitFlap/board/pin_mux.c @@ -19,8 +19,6 @@ pin_labels: /* clang-format on */ #include "fsl_common.h" -#include "fsl_port.h" -#include "fsl_gpio.h" #include "pin_mux.h" /* FUNCTION ************************************************************************************************************ @@ -39,8 +37,7 @@ void BOARD_InitBootPins(void) * TEXT BELOW IS USED AS SETTING FOR TOOLS ************************************* BOARD_InitPins: - options: {callFromInitBoot: 'true', coreID: core0, enableClock: 'true'} -- pin_list: - - {pin_num: '45', peripheral: GPIOC, signal: 'GPIO, 2', pin_signal: ADC0_SE4b/CMP1_IN0/PTC2/SPI0_PCS2/UART1_CTS_b/FTM0_CH1/FB_AD12/I2S0_TX_FS/LPUART0_CTS_b, direction: OUTPUT} +- pin_list: [] * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS *********** */ /* clang-format on */ @@ -53,18 +50,6 @@ BOARD_InitPins: * END ****************************************************************************************************************/ void BOARD_InitPins(void) { - /* Port C Clock Gate Control: Clock enabled */ - CLOCK_EnableClock(kCLOCK_PortC); - - gpio_pin_config_t LED_BLUE_config = { - .pinDirection = kGPIO_DigitalOutput, - .outputLogic = 0U - }; - /* Initialize GPIO functionality on pin PTC2 (pin 45) */ - GPIO_PinInit(BOARD_INITPINS_LED_BLUE_GPIO, BOARD_INITPINS_LED_BLUE_PIN, &LED_BLUE_config); - - /* PORTC2 (pin 45) is configured as PTC2 */ - PORT_SetPinMux(BOARD_INITPINS_LED_BLUE_PORT, BOARD_INITPINS_LED_BLUE_PIN, kPORT_MuxAsGpio); } /*********************************************************************************************************************** * EOF diff --git a/ADIS_tinyK22_SplitFlap/board/pin_mux.h b/ADIS_tinyK22_SplitFlap/board/pin_mux.h index f040628..598ae8e 100644 --- a/ADIS_tinyK22_SplitFlap/board/pin_mux.h +++ b/ADIS_tinyK22_SplitFlap/board/pin_mux.h @@ -25,19 +25,6 @@ extern "C" { */ void BOARD_InitBootPins(void); -/*! @name PORTC2 (number 45), LED_BLUE - @{ */ - -/* Symbols to be used with GPIO driver */ -#define BOARD_INITPINS_LED_BLUE_GPIO GPIOC /*!<@brief GPIO peripheral base pointer */ -#define BOARD_INITPINS_LED_BLUE_GPIO_PIN_MASK (1U << 2U) /*!<@brief GPIO pin mask */ - -/* Symbols to be used with PORT driver */ -#define BOARD_INITPINS_LED_BLUE_PORT PORTC /*!<@brief PORT peripheral base pointer */ -#define BOARD_INITPINS_LED_BLUE_PIN 2U /*!<@brief PORT pin number */ -#define BOARD_INITPINS_LED_BLUE_PIN_MASK (1U << 2U) /*!<@brief PORT pin mask */ - /* @} */ - /*! * @brief Configures pin routing and optionally pin electrical features. * diff --git a/ADIS_tinyK22_SplitFlap/source/application.c b/ADIS_tinyK22_SplitFlap/source/application.c index 3abb7a0..9444728 100644 --- a/ADIS_tinyK22_SplitFlap/source/application.c +++ b/ADIS_tinyK22_SplitFlap/source/application.c @@ -70,15 +70,21 @@ void App_Init(void){ /* Application run */ void App_Run(void){ - while(1) { + + SF_MoveMotorToZeroPosition(splitflap0); + + + + /* TEST PATTERN */ + /*while(1) { if(SF_GetMagSensorAtZeroPosition(splitflap0)){ McuLED_On(LED_blue); } else { McuLED_Off(LED_blue); } - McuWait_Waitms(10); /* wait for 100 ms */ - } + McuWait_Waitms(10); // wait for 10 ms + }*/ } diff --git a/ADIS_tinyK22_SplitFlap/source/main.c b/ADIS_tinyK22_SplitFlap/source/main.c index a62fd37..789707b 100644 --- a/ADIS_tinyK22_SplitFlap/source/main.c +++ b/ADIS_tinyK22_SplitFlap/source/main.c @@ -72,7 +72,7 @@ int main(void) { App_Run(); /* deinit app */ - //PRINTF("De-Initializing App...\n"); + PRINTF("De-Initializing App...\n"); App_Deinit(); /* deinit platform */ diff --git a/ADIS_tinyK22_SplitFlap/source/platform.c b/ADIS_tinyK22_SplitFlap/source/platform.c index 08a015a..e15e9ce 100644 --- a/ADIS_tinyK22_SplitFlap/source/platform.c +++ b/ADIS_tinyK22_SplitFlap/source/platform.c @@ -14,6 +14,12 @@ #include "splitflap.h" void PL_Init(void){ + + /* Enable clock for used PORTS */ + CLOCK_EnableClock(kCLOCK_PortA); + CLOCK_EnableClock(kCLOCK_PortB); + CLOCK_EnableClock(kCLOCK_PortC); + McuLib_Init(); McuWait_Init(); McuGPIO_Init(); diff --git a/ADIS_tinyK22_SplitFlap/source/splitflap.c b/ADIS_tinyK22_SplitFlap/source/splitflap.c index 3bd3805..48488a0 100644 --- a/ADIS_tinyK22_SplitFlap/source/splitflap.c +++ b/ADIS_tinyK22_SplitFlap/source/splitflap.c @@ -86,11 +86,28 @@ SF_Handle_t SF_Init(SF_Config_t* instance, int id){ bool SF_MoveMotorToZeroPosition(SF_Handle_t instance){ int numStepsMoved = 0; + // move out of sensor + while(SF_GetMagSensorAtZeroPosition((SF_t*)instance) == true){ + McuULN2003_IncStep(((SF_t*)instance)->motor); + McuWait_Waitms(20); + } + + // turn until sensor is on while(SF_GetMagSensorAtZeroPosition((SF_t*)instance) == false && numStepsMoved < SPLITFLAP_STEPS_ONE_ROUND ){ McuULN2003_IncStep(((SF_t*)instance)->motor); McuWait_Waitms(20); numStepsMoved++; } + + // one more segment if not already one round + if(numStepsMoved < SPLITFLAP_STEPS_ONE_ROUND){ + for(int i=0; imotor); + McuWait_Waitms(20); + numStepsMoved++; + } + } + McuULN2003_SetPos(((SF_t*)instance)->motor, 0); McuULN2003_PowerOff(((SF_t*)instance)->motor); // success if less than one rotation @@ -116,7 +133,7 @@ void SF_MoveSteps(SF_Handle_t instance, int32_t steps){ } bool SF_GetMagSensorAtZeroPosition(SF_Handle_t instance){ - return McuGPIO_GetValue(((SF_t*)instance)->magSensor); + return McuGPIO_IsLow(((SF_t*)instance)->magSensor); } void SF_MoveToFlap(SF_Handle_t instance, char* flap){ diff --git a/ADIS_tinyK22_SplitFlap/source/splitflap.h b/ADIS_tinyK22_SplitFlap/source/splitflap.h index ffc6ac8..05b4144 100644 --- a/ADIS_tinyK22_SplitFlap/source/splitflap.h +++ b/ADIS_tinyK22_SplitFlap/source/splitflap.h @@ -15,7 +15,8 @@ /****** SETTINGS ******/ #define SPLITFLAP_CONFIG_USE_FREERTOS_HEAP 0 -#define SPLITFLAP_STEPS_ONE_ROUND 200 +#define SPLITFLAP_STEPS_ONE_ROUND 520 // 40 segments a 13 steps +#define SPLITFLAP_STEPS_PER_SEGMENT 13 /****** TYPES ******/